繁体   English   中英

导入模块失败,因为 __name__ 是 __main__

[英]Import in a module fails because __name__ is __main__

这是我的项目结构:

Project
   main.py
   myPackage/
      subfolder1/
         __init__.py
         script11.py
         script12.py
      subfolder2/
         __init__.py
         script2.py
   __init__.py

main.py我通过以下方式导入script2.py

from myPackage.subfolder2 import script2 as script2

然后,我从script2.py中的main.py调用一个函数:

bar = script2.foo()

script2我需要从script1导入一个函数:

from ..subfolder1.script11 import my_function

它因错误而中断:

attempted relative import with no known parent package

我检查了__name__变量,它确实具有__main__值。 我怎样才能正确地管理它?

所有你应该做的是改变你的进口main.py ,以from myPackage.subfolder2 import script2 我使用该导入以这种方式设置了一个目录和一些文件,并且脚本按预期运行:

main.py
myPackage/
  subfolder1/
    script11.py
  subfolder2/
    script2.py

脚本11.py

def bar():
    return 10

脚本2.py

from ..subfolder1.script11 import bar

def foo():
    x = bar()
    print('foo is', x)

主文件

from myPackage.subfolder2 import script2 as s2

s2.foo()

跑步:

>>> py .\main.py
foo is 10

一些注意事项:

  • 我假设 Python 3,因为 Python 2 从今年年初被弃用
  • 在 Python 3 中, __init__.py文件不是制作包所必需的,但拥有它们不会有任何伤害。 如果你愿意,你可以把它们放在外面。
  • from subfolder2 import script2 as script2as script2部分是多余的。 它将已作为script2导入。

暂无
暂无

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

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