检查PYTHONPATH上是否有所有需要的模块

检查PYTHONPATH上是否有所有需要的模块,python,Python,我已经用Python编写了一个大型系统,现在我想分发给一些同事。有几个文件夹需要添加到PYTHONPATH中才能找到我的所有模块(文件)。我正在寻找一种方法,如果他们没有正确设置PYTHONPATH,就可以给他们发送正确的错误消息。假设结构是: ParentModule calls Child calls GrandChild calls MyModule 如果他们运行ParentModule,它可能会运行很长一段时间,直到它在孙子中结束并需要MyModule,如

我已经用Python编写了一个大型系统,现在我想分发给一些同事。有几个文件夹需要添加到PYTHONPATH中才能找到我的所有模块(文件)。我正在寻找一种方法,如果他们没有正确设置PYTHONPATH,就可以给他们发送正确的错误消息。假设结构是:

ParentModule
  calls Child
     calls GrandChild
        calls MyModule
如果他们运行ParentModule,它可能会运行很长一段时间,直到它在孙子中结束并需要MyModule,如果MyModule的目录不在PYTHONPATH上,它会崩溃,抱怨找不到MyModule。我希望能够做一些事情,比如:

for file in (all files that could ever be reached from here):
  if all modules needed by 'file' are not available
    print "error: Please make sure your PYTHONPATH points to x,y, and z"

这样的事情可能吗

在主模块顶部,我将尝试导入程序所依赖的所有模块,并用try/将其包装,除非在任何导入语句失败时打印sane错误:

import sys
try:
    import Child
    import GrandChild
    import MyModule
except ImportError:
    print "Error: Please make sure your PYTHONPATH points to x, y, and z"
    sys.exit(1)

# current module contents
根据您“调用”
Child
grant
MyModule
的方式,这应该会自动发生

如果“调用”的意思是导入,并且您按照常规的模块类型进行导入,那么所有导入链接将在导入父模块时自动发生。因此,如果下游导入不可用,那么在导入
ParentModule
时,您将得到一个
ImportError
。如果你正在“调用”脚本,比如说,在子流程中执行它们,那么不,考虑到你所做的事情完全是动态的,我认为没有一种简单的方法来确保模块的可用性。类似地,如果您正在进行完全动态的导入。这通常是动态规划的不利方面之一——通常没有严格的方法来确保事情按照您的预期进行

编辑:


你当然可以像@F.J.建议的那样做一些启发性的事情。

导入是否是如此动态,以至于你无法为你的程序的每个版本枚举它们并静态检查它们?请举例说明如何实际使用
子版本
孙版本
MyModule
。中文件的
问题(从这里可以访问的所有文件):
是指任何文件都可能从任何地方访问:P.除非你说的“已访问”和“已调用”是指更具体的内容。有没有办法:myModule=“Child”;导入myModule?或者“导入”后的关键字必须是静态/文本的吗?如果您想通过动态变量名导入模块,可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。