将python脚本作为其父模块的一部分运行

将python脚本作为其父模块的一部分运行,python,python-2.7,Python,Python 2.7,我有一个python项目,其结构如下: root/ __init__.py coolstuff.py moduleA/ __init__.py myscript.py 当我的工作目录是moduleA时,我如何运行myscript.py,知道它需要访问coolstuff 编辑:我知道$PYTHONPATH解决方案,但我想知道还有哪些其他解决方案存在将根目录包含到path中并导入包。在myscript.py中包含以下代码 import sys

我有一个python项目,其结构如下:

root/
    __init__.py
    coolstuff.py
    moduleA/
        __init__.py
        myscript.py
当我的工作目录是moduleA时,我如何运行myscript.py,知道它需要访问coolstuff


编辑:我知道$PYTHONPATH解决方案,但我想知道还有哪些其他解决方案存在

将根目录包含到path中并导入包。在myscript.py中包含以下代码

import sys
from os.path import dirname,abspath
sys.path.append(dirname(dirname(abspath(__file__))))
import coolstuff
# do cool stuff
希望这有帮助


编辑:添加了导入sys

您可以导入sys并导入您的coolstuff.py所在的实际目录

例如:

注意:如果您使用的是Windows,请使用如下路径-C:\Users\test\Documents,因为您的coolstuff.py驻留在文档中

__init__.py is not required for this method.

希望这对你有帮助

将项目的路径添加到PYTHONPATH:

export PYTHONPATH =$PYTHONPATH:/xyz/root/
或者类似于python:

import sys
sys.path.append("/xyz/root/")# path to your project directory

现在,您只需导入即可从根目录访问所有模块。

您可以将根目录添加到$PYTHONPATH&然后您可以在任何地方导入coolstuff模块。.下面是您的答案:@shiva您的答案没有考虑到我想从工作目录moduleA运行myscript这一事实;这样做会使我尝试在非包中进行相对导入,或者尝试在toplevel之外进行相对导入package@advay.umare请随意将您的评论作为答案,因为我认为它对其他人仍然有用people@FlorentinHennecker好的,有趣的回答!不过,还有一件事让我感到困扰;此解决方案要求您知道自己在层次结构中的位置。有没有办法将root定义为顶级包并避免使用硬编码的dirname?我不知道这种解决方案,但我认为了解自己项目的层次结构并在脚本顶部包含3条规则没有问题。如果run的意思是执行,使其成为自己的_主__;那么没有问题,我不这么认为。请参阅:。特别是最后一段。换句话说。直接执行的脚本不知道目录结构可能表明它是其中一部分的包。
import sys
sys.path.append("/xyz/root/")# path to your project directory