Tôi đang viết một chương trình phân loại danh sách các tệp Python theo đó các mô-đun họ nhập. Vì vậy, tôi cần phải quét bộ sưu tập các quảng cáo tệp .py trả về danh sách các mô-đun mà chúng nhập. Ví dụ, nếu một trong số các tập tin tôi nhập khẩu có những dòng sau:Trả về danh sách các mô-đun Python đã nhập được sử dụng trong tập lệnh?
import os
import sys, gtk
Tôi muốn nó trở lại:
["os", "sys", "gtk"]
tôi chơi với modulefinder và viết:
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script('testscript.py')
print 'Loaded modules:'
for name, mod in finder.modules.iteritems():
print '%s ' % name,
nhưng điều này trả về nhiều hơn chỉ là các mô-đun được sử dụng trong tập lệnh. Như một ví dụ trong một kịch bản mà chỉ có:
import os
print os.getenv('USERNAME')
Các module trở về từ các ModuleFinder kịch bản trở lại:
tokenize heapq __future__ copy_reg sre_compile _collections cStringIO _sre functools random cPickle __builtin__ subprocess cmd gc __main__ operator array select _heapq _threading_local abc _bisect posixpath _random os2emxpath tempfile errno pprint binascii token sre_constants re _abcoll collections ntpath threading opcode _struct _warnings math shlex fcntl genericpath stat string warnings UserDict inspect repr struct sys pwd imp getopt readline copy bdb types strop _functools keyword thread StringIO bisect pickle signal traceback difflib marshal linecache itertools dummy_thread posix doctest unittest time sre_parse os pdb dis
... trong khi tôi chỉ muốn nó trở lại 'os', vì đó là mô-đun được sử dụng trong tập lệnh.
Có ai có thể giúp tôi đạt được điều này không?
CẬP NHẬT: Tôi chỉ muốn làm rõ rằng tôi muốn thực hiện điều này mà không cần chạy tệp Python đang được phân tích và chỉ quét mã.
có bất kỳ mô-đun bổ sung nào được thêm vào thủ công với câu lệnh nhập không? Nếu không, bạn có thể không chỉ tạo một mô-đun trống, chạy công cụ tìm mô-đun của bạn trên đó và sử dụng kết quả bằng cách xóa các mô-đun đó khỏi kết quả của mỗi mô-đun khác không? I E. 'modulefinder (some_module) - modulefinder (empty_module)'? –