在运行时发现Java .jar中的Jython模块?

时间:2018-08-16 20:06:46

标签: python jython discovery

如果以编译的.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(),以便它返回提供的包中的模块列表?我宁愿采用这种方法,也不必强迫客户明确传递模块列表。

1 个答案:

答案 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中工作