从包目录

时间:2017-09-19 20:44:17

标签: python python-3.x python-import python-module

我目前正在使用以下目录结构:

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)。

2 个答案:

答案 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