导入模块失败,因为 __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

然后,我在 main.py 中从 script2.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

script11.py

def bar():
    return 10

script2.py

from ..subfolder1.script11 import bar

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

main.py

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 script2 中的 as script2 部分是多余的。它已经被导入为 script2.