繁体   English   中英

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

[英]Python import works when running module but breaks when this module is imported

我有这样的目录结构:

source\
  main\
    bar.py
    run.py
  A\
    foo.py

bar.py具有foo.py需要的功能,因此我from bar import *使用它,因为我为foo.py了找到bar.py的正确路径,因此它可以bar.py 我通过运行foo.py并从bar.py调用任何函数而不在其旁边附加bar来验证这一点。 例如,如果myFun定义在bar.py ,我可以简单地叫myFun(...)foo.py 到目前为止,一切正常。

run.py导入foo.py 但是,当我尝试从foo.py运行一个函数, foo.py该函数又使用了从bar.py导入的函数时,Python声称myFun(...)不存在。 请注意, myFun最初是在bar.py定义的。

NameError: global name 'myFun' is not defined

我设法解决此问题的唯一方法是将myFun复制到foo.py ,但这并不是真正的解决方案。

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

现在,将函数从foo.py导入到run.py应该很容易:

from A.foo import fooFun1, fooFun2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM