modulefinder --- یافتن ماژولهای استفادهشده توسط یک اسکریپت¶
کد منبع: Lib/modulefinder.py
این ماژول یک کلاس ModuleFinder را ارائه میدهد که میتوان از آن برای تعیین مجموعه ماژولهای ایمپورتشده توسط یک اسکریپت استفاده کرد. همچنین میتوان modulefinder.py را بهعنوان یک اسکریپت اجرا کرد، بهطوری که نام پرونده یک اسکریپت پایتون بهعنوان آرگومان آن داده شود؛ پس از آن، گزارشی از ماژولهای ایمپورتشده چاپ خواهد شد.
- modulefinder.AddPackagePath(pkg_name, path)¶
ثبت کنید که بستهای به نام pkg_name را میتوان در path مشخصشده یافت.
- modulefinder.ReplacePackage(oldname, newname)¶
به شما امکان میدهد مشخص کنید که ماژولی به نام oldname در واقع بستهای به نام newname است.
- class modulefinder.ModuleFinder(path=None, debug=0, excludes=[], replace_paths=[])¶
این کلاس، متدهای
run_script()وreport()را برای تعیین مجموعهای از ماژولهای ایمپورتشده توسط یک اسکریپت فراهم میکند. path میتواند فهرستی از پوشهها برای جستوجوی ماژولها باشد؛ اگر مشخص نشده باشد، ازsys.pathاستفاده میشود. debug سطح اشکالزدایی را تنظیم میکند؛ مقادیر بالاتر باعث میشود که کلاس پیامهای اشکالزدایی دربارهی آنچه انجام میدهد را چاپ کند. excludes فهرستی از نام ماژولها برای حذف از تحلیل است. replace_paths فهرستی از تاپلهای(oldpath, newpath)است که در مسیرهای ماژول جایگزین خواهند شد.- report()¶
گزارشی را در خروجی استاندارد چاپ میکند که ماژولهای ایمپورتشده توسط اسکریپت و مسیرهای آنها و همچنین ماژولهایی را که موجود نیستند یا به نظر میرسد موجود نیستند، فهرست میکند.
- run_script(pathname)¶
محتوای پرونده pathname را تحلیل میکند؛ این پرونده باید حاوی کد پایتون باشد.
- modules¶
یک دیکشنری که نام ماژولها را به ماژولها نگاشت میکند. نمونهای از کاربرد ModuleFinder را ببینید.
نمونهای از کاربرد ModuleFinder¶
اسکریپتی که در ادامه تحلیل خواهد شد (bacon.py):
import re, itertools
try:
import baconhameggs
except ImportError:
pass
try:
import guido.python.ham
except ImportError:
pass
اسکریپتی که گزارش bacon.py را خروجی خواهد داد:
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script('bacon.py')
print('Loaded modules:')
for name, mod in finder.modules.items():
print('%s: ' % name, end='')
print(','.join(list(mod.globalnames.keys())[:3]))
print('-'*50)
print('Modules not imported:')
print('\n'.join(finder.badmodules.keys()))
خروجی نمونه (ممکن است بسته به معماری متفاوت باشد):
Loaded modules:
_types:
copyreg: _inverted_registry,_slotnames,__all__
re._compiler: isstring,_sre,_optimize_unicode
_sre:
re._constants: REPEAT_ONE,makedict,AT_END_LINE
sys:
re: __module__,finditer,_expand
itertools:
__main__: re,itertools,baconhameggs
re._parser: _PATTERNENDERS,SRE_FLAG_UNICODE
array:
types: __module__,IntType,TypeType
---------------------------------------------------
Modules not imported:
guido.python.ham
baconhameggs