如果以编译的.py $ class文件形式存在于Java .jar中,是否可以在运行时发现包中的Jython模块?
假设我有一个包含功能foo
的模块frobify
。我团队中的其他人正在提供一个包含模块的软件包bar
:
bar/
__init__.py
tweedledee.py
tweedledum.py
walrus.py
carpenter.py
他们使用Jython将它们中的每一个编译成一个.py$class
文件,然后将包括所有bar
个文件的.py$class
目录转换成bar.jar
然后我们运行Jython并执行以下命令:
import foo
import bar
foo.frobify(bar)
我要写frobify()
的位置:
def frobify(package):
for module in get_modules(package):
do_something_with(module)
如何实现get_modules()
,以便它返回提供的包中的模块列表?我宁愿采用这种方法,也不必强迫客户明确传递模块列表。
答案 0 :(得分:1)
嗯。看来pkgutil可以做到:
import sys
import pkgutil
def get_modules():
pkg = sys.modules[__name__]
return [importer.find_module(name).load_module(name)
for importer, name, ispkg
in pkgutil.iter_modules(pkg.__path__)]
它在Jython 2.5.3和Python 2.7.1中工作