我有一个像这样的目录结构:
source\
main\
bar.py
run.py
A\
foo.py
bar.py
具有foo.py
所需的功能,因此我使用from bar import *
,因为我已foo.py
找到bar.py
的正确路径。我通过运行foo.py
并调用bar.py
中的任何功能而不在其旁边附加bar
来验证这一点。例如,如果myFun
中定义了bar.py
,我只需在myFun(...)
中拨打foo.py
即可。到目前为止,这一切都很有效。
run.py
导入foo.py
。但是,当我尝试从foo.py
运行一个函数,而该函数又使用从bar.py
导入的函数时,Python声称myFun(...)
不存在。请注意,myFun
最初是在bar.py
中定义的。
NameError: global name 'myFun' is not defined
我设法解决此问题的唯一方法是将myFun
复制到foo.py
,但这不是真正的解决方案。
答案 0 :(得分:1)
只要您有其他选项,就应该避免摆弄导入路径。在这种情况下,创建空文件main\__init__.py
和A\__init__.py
,以便Python将这些目录识别为包,将bar
替换为main.bar
中的foo.py
并从顶部运行源目录。
现在,从foo.py
向run.py
导入功能应该非常简单:
from A.foo import fooFun1, fooFun2