我已经用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"
这样的事情可能吗?
答案 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)
取决于您如何调用" Child
,GrandChild
和MyModule
,这应该会自动发生。
如果通过"打电话"你的意思是import
,并且你在模块的类型上进行导入,就像传统一样,然后所有的导入链都会在导入父模块时自动发生。因此,如果下游导入不可用,则导入ImportError
时您将获得ParentModule
。如果您正在呼叫"脚本,比方说,在子流程中执行它们,然后我不认为这是一种确保模块可用性的简单方法,因为你所做的事情具有完全动态性。同样,如果您正在进行完全动态的导入。这是动态编程的一个缺点 - 通常没有严格的方法来确保事情按照你的预期方式进行。
编辑:
你绝对可以像@ F.J那样做一些启发式的东西。尽管如此。