导入模块失败,因为 __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
.
这是我的项目结构:
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
.