Python导入在运行模块时有效,但在导入此模块时会中断

时间:2014-11-23 01:28:54

标签: python python-2.7 import

我有一个像这样的目录结构:

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,但这不是真正的解决方案。

1 个答案:

答案 0 :(得分:1)

只要您有其他选项,就应该避免摆弄导入路径。在这种情况下,创建空文件main\__init__.pyA\__init__.py,以便Python将这些目录识别为包,将bar替换为main.bar中的foo.py并从顶部运行源目录。

现在,从foo.pyrun.py导入功能应该非常简单:

from A.foo import fooFun1, fooFun2