Python:从项目导入而不手动设置PYTHONPATH

时间:2015-02-19 17:57:11

标签: python

如何在不重置PYTHONPATH的情况下从项目中的不同位置导入包和模块(因为这看起来像'hacky'解决方案)。

例如,如果我有以下目录结构:

proj
├── __init__.py
├── important_file.py
└── subdirectory/
    ├── __init__.py
    └── script.py

如何从script.py中导入important_file.py?我可以在项目中以某种方式指定proj是我的根目录,以便我可以使用import proj.important_file导入重要文件吗?

3 个答案:

答案 0 :(得分:0)

您可以使用

import sys
sys.path.append('/path/to/root/directory')

从您喜欢的任何目录导入。至少,这在过去对我有用。也许有更少的“hacky”解决方案:)

答案 1 :(得分:0)

您可以使用相对导入

# inside subdirectory/script.py
from .. import important_file

但最好的解决方案是将其添加到PYTHONPATH并执行

import proj.important_file

答案 2 :(得分:0)

我倾向于选择“pythonic”解决方案,不一定是@Gijs所建议的,我会更多地称之为解决方案。

所以这是我没有做太多的事情,但是当我需要这样做时,我花了很多时间。看一下这个my repo。在其中,我有一个单元测试目录,我将core.py导入test_core.py。

项目文件夹的结构如下。

SNA (this is called first-repo on git, but SNA on my machine)
├── bin/
└── sna/
    ├── core.py
    └── test/
        └── test_core.py

text_core.py中,我从core.py导入我的函数。我通过使用以下行来完成此操作。

from SNA.sna.core import *

这是一般的格式。

from PROJECTNAME.DIR.FILE import * (or specific functions)

希望这有帮助!