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

时间:2014-03-26 17:42:05

标签: python

我已经用Python编写了一个大型系统,我现在想要分发给一些同事。对于要找到的所有模块(文件),需要将一些文件夹添加到PYTHONPATH。我正在寻找一种方法,如果他们没有正确设置他们的PYTHONPATH,给他们理智的错误信息。说结构是:

ParentModule
  calls Child
     calls GrandChild
        calls MyModule

如果他们运行ParentModule,它可能会在GrandChild结束之前运行很长时间并且需要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"

这样的事情可能吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

取决于您如何调用" ChildGrandChildMyModule,这应该会自动发生。

如果通过"打电话"你的意思是import,并且你在模块的类型上进行导入,就像传统一样,然后所有的导入链都会在导入父模块时自动发生。因此,如果下游导入不可用,则导入ImportError时您将获得ParentModule。如果您正在呼叫"脚本,比方说,在子流程中执行它们,然后我不认为这是一种确保模块可用性的简单方法,因为你所做的事情具有完全动态性。同样,如果您正在进行完全动态的导入。这是动态编程的一个缺点 - 通常没有严格的方法来确保事情按照你的预期方式进行。

编辑:

你绝对可以像@ F.J那样做一些启发式的东西。尽管如此。