我目前正在使用以下目录结构:
package/
__init__.py
MainModule.py
Module2.py
run.py
使用Python 3,我了解到为了MainModule
导入Module2
,我需要使用显式相对导入(即import .Module2
)。但是,之前我通过运行MainModule
作为脚本来测试这些文件,在这种情况下我得到了
SystemError:未加载父模块,无法执行相对导入
来自this answer,据我所知,根据Guido的说法,将模块作为脚本运行是一种hackish和unpythonic。相反,我添加了run.py
,这只是:
import sys
sys.path.append('/path/to/package-superdirectory')
from package.MainModule import main
main()
出于某种原因,当我运行run.py
时,我正在
ImportError:没有名为'package.MainModule'的模块; 'package'不是包
我可以使用MainModule
内的脚本运行package/
吗?我需要package/
目录中的脚本用于组织目的,我需要MainModule
才能使用显式相对导入。这些文件将放在库中,但它们当前不在PYTHONPATH
,因此据我所知python3 -m
在此无法使用。
我需要从特定目录/other/dir
运行此特定脚本,因此答案需要能够从任何地方运行run.py
(或MainModule
)。
答案 0 :(得分:1)
所以我已经弄清楚如何让它发挥作用。由于我的环境中有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
。
答案 1 :(得分:0)
你创造了吗? 的初始化强>的.py in / package?
编辑:
尝试使用from .MainModule import main