【发布时间】:2018-02-28 18:32:31
【问题描述】:
我目前正在使用以下目录结构:
package/
__init__.py
MainModule.py
Module2.py
run.py
使用 Python 3,我了解到为了让 MainModule 导入 Module2,我需要使用显式相对导入(即 import .Module2)。但是,以前我通过将MainModule 作为脚本运行来测试这些文件,在这种情况下我得到了
系统错误:父模块''未加载,无法执行相对导入
根据 Guido 的说法,我从 this answer 了解到,将模块作为脚本运行是一种 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/ 目录中的脚本,并且我需要 MainModule 才能使用显式相对导入。这些文件将放入库中,但它们目前不在 PYTHONPATH 上,所以据我所知 python3 -m 不会在这里工作。
更新:
我需要从特定目录/other/dir 运行此特定脚本,因此答案需要能够从任何地方运行run.py(或MainModule)。
【问题讨论】:
-
尝试从
/path/to/package-superdirectory运行python3 -m package.MainModule? -
@vaultah 查看我的更新;我尝试运行你所说的,但它吐出
No module named package.MainModule
标签: python python-3.x python-import python-module