从包目录中导入包
Import package from within package directory
我目前正在使用以下目录结构:
package/
__init__.py
MainModule.py
Module2.py
run.py
使用 Python 3,我了解到为了让 MainModule
导入 Module2
,我需要使用显式相对导入(即 import .Module2
).但是,之前我通过 运行ning MainModule
作为脚本测试这些文件,在这种情况下我得到
SystemError: Parent module '' not loaded, cannot perform relative import
来自 this answer,据 Guido 说,我了解到 运行将模块作为脚本是有点老套和非 pythonic 的。因此,我添加了 run.py
,即:
import sys
sys.path.append('/path/to/package-superdirectory')
from package.MainModule import main
main()
出于某种原因,当我 运行 run.py
时,我得到
ImportError: No module named 'package.MainModule'; 'package' is not a package
有没有办法可以 运行 MainModule
使用 package/
中的脚本?出于组织目的,我需要 package/
目录中的脚本,并且我需要 MainModule
才能使用显式相对导入。这些文件将放入库中,但它们目前不在 PYTHONPATH
上,因此据我所知 python3 -m
在这里不起作用。
更新:
我需要 运行 来自特定目录的这个特定脚本,/other/dir
,所以答案需要能够 运行 run.py
(或 MainModule
) 来自任何地方。
你创造了吗
初始化.py
在 /package?
编辑:
尝试使用 from .MainModule import main
所以我想出了如何让它发挥作用。由于我的环境中有一个 package
(它是同一个包的稳定版本),我不得不在 package
的超级目录之上添加路径。所以我的 run.py
现在看起来像:
#!/usr/bin/env python3
import sys
sys.path.append('/path/to')
from package-superdirectory.package.MainModule import main
main()
假设 package
中的所有模块都使用显式相对导入(即 import .Module2
),调用 ./run.py
将 运行 MainModule
正确。
我目前正在使用以下目录结构:
package/
__init__.py
MainModule.py
Module2.py
run.py
使用 Python 3,我了解到为了让 MainModule
导入 Module2
,我需要使用显式相对导入(即 import .Module2
).但是,之前我通过 运行ning MainModule
作为脚本测试这些文件,在这种情况下我得到
SystemError: Parent module '' not loaded, cannot perform relative import
来自 this answer,据 Guido 说,我了解到 运行将模块作为脚本是有点老套和非 pythonic 的。因此,我添加了 run.py
,即:
import sys
sys.path.append('/path/to/package-superdirectory')
from package.MainModule import main
main()
出于某种原因,当我 运行 run.py
时,我得到
ImportError: No module named 'package.MainModule'; 'package' is not a package
有没有办法可以 运行 MainModule
使用 package/
中的脚本?出于组织目的,我需要 package/
目录中的脚本,并且我需要 MainModule
才能使用显式相对导入。这些文件将放入库中,但它们目前不在 PYTHONPATH
上,因此据我所知 python3 -m
在这里不起作用。
更新:
我需要 运行 来自特定目录的这个特定脚本,/other/dir
,所以答案需要能够 运行 run.py
(或 MainModule
) 来自任何地方。
你创造了吗 初始化.py 在 /package?
编辑:
尝试使用 from .MainModule import main
所以我想出了如何让它发挥作用。由于我的环境中有一个 package
(它是同一个包的稳定版本),我不得不在 package
的超级目录之上添加路径。所以我的 run.py
现在看起来像:
#!/usr/bin/env python3
import sys
sys.path.append('/path/to')
from package-superdirectory.package.MainModule import main
main()
假设 package
中的所有模块都使用显式相对导入(即 import .Module2
),调用 ./run.py
将 运行 MainModule
正确。