【发布时间】:2014-11-23 01:28:53
【问题描述】:
我有一个这样的目录结构:
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 中,我可以简单地在foo.py 中调用myFun(...)。到目前为止,这一切都很好。
run.py 导入 foo.py。但是,当我尝试从 foo.py 运行一个函数时,该函数又使用从 bar.py 导入的函数,Python 声称 myFun(...) 不存在。请注意,myFun 最初是在 bar.py 中定义的。
NameError: global name 'myFun' is not defined
我设法解决此问题的唯一方法是将myFun 复制到foo.py,但这并不是真正的解决方案。
【问题讨论】:
-
不确定它是否有效,但您可以尝试在 foo.py 中创建一个执行 myFun 的函数,如果没有,为什么不直接将 bar.py 导入 run.py 文件?
-
请提供代码sn-ps。在导入时更容易准确理解您使用的语义。
-
你身边有不同的
bar.py吗?在foo.py中,添加import bar;print os.path.abspath(bar.__file__)。此外,在 foo.py 中,添加from bar import myFun... 这应该会更早地触发错误(并且更接近故障)。 -
在
run.py,你在做from foo import *吗?您是否在 foo 中使用__all__变量(这会掩盖您导入的内容)?
标签: python python-2.7 import