Python:从父文件夹导入文件

Python:从父文件夹导入文件,python,Python,…现在我知道这个问题已经被问过很多次了&我已经看了这些其他的线索。从使用sys.path.append('.')到只导入foo,到目前为止还没有任何效果 我有一个python文件,希望导入一个文件(位于其父目录中)。你能帮我弄清楚我的子文件是如何成功地将其导入父目录中的a文件的吗。我正在使用python 2.7 结构是这样的(每个目录中也有\uuuuu init\uuuu.py文件): StockTracker/ \uuComp/ \uuuuuuuuuuuuuuuuuuuuuuuuua.py \

…现在我知道这个问题已经被问过很多次了&我已经看了这些其他的线索。从使用sys.path.append('.')到只导入foo,到目前为止还没有任何效果

我有一个python文件,希望导入一个文件(位于其父目录中)。你能帮我弄清楚我的子文件是如何成功地将其导入父目录中的a文件的吗。我正在使用python 2.7

结构是这样的(每个目录中也有\uuuuu init\uuuu.py文件):

StockTracker/
\uuComp/
\uuuuuuuuuuuuuuuuuuuuuuuuua.py
\uuuuuuuuuuuuuuuuuuuuu子公司/
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

在b.py中,我想导入a.py:因此我尝试了以下每一项,但在b.py中仍然出现一个错误,即“没有这样的模块a”

我应该这样做。这只适用于Python的最新版本——我相信是从2.6开始的[Edit:since 2.5]


每个级别(Comp和Subcomp)也必须有一个
\uuuu init\uuuuu.py
文件才能工作。您已经说过了。如果Comp目录在PYTHONPATH环境变量中,则为plain old

import a
会有用的

如果您使用的是Linux或OS X,并且从bash shell启动程序,那么您可以通过

export PYTHONPATH=$PYTHONPATH:/path/to/Comp
对于Windows,请查看以下链接:

编辑:

要以编程方式修改路径,您的原始问题是正确的。您只需要添加父目录而不是当前目录

sys.path.append("..")
import a
当包被构造成 子包(与声音包一样 在本例中),可以使用绝对值 导入以引用的子模块 兄弟姐妹包裹。例如,如果 模块sound.filters.vocoder需要 使用中的回声模块 sound.effects软件包,可以从 音效输入回声

另外,从Python 2.5开始 隐式相对导入 如上所述,您可以编写 使用 从模块导入名称导入的表单 陈述这些是明确的亲属关系 导入使用前导点表示 当前包和父包 涉及相对进口。从…起 例如,环绕声模块 可以使用:

from . import echo
from .. import formats
from ..filters import equalizer

引用这里的话

如何调用python?也就是说,它是如何找到StockTracker.Comp.SubComp.b的?谢谢你的回答,我从来没有听说过PYTHONPATH环境变量?你能告诉我怎么做你说的吗?在StockTracker目录中,我有一个名为RunStockTracker.py的主程序启动器文件,我是否应该“确保Comp目录位于该文件中的PYTHONPATH环境变量”(in code)中?这个答案(
sys.path.append('..)
)是唯一有效的答案,如果您运行的是
b.py
,我相信这是从2.7开始的。这是你的答案,你能核对一下吗?嗯,我们都错了!从2.5开始。谢谢,我会更新的。那可能有用。但是,请不要这样做。请确保绝对导入有效。@Lennart:为什么?这正是相对导入的设计目的,您可能不希望通过PYTHONPATH将子包公开给所有导入。我能看到的反对使用相对导入的唯一理由是向后兼容性,支持Python 2.4并不是我的首要任务。当前模块显然是为导入而公开的,所以为什么不正确地“公开”包呢。如果安装正确,您不需要进行任何PYTHONPATH黑客攻击,如果安装正确,绝对导入将起作用。
sys.path.append("..")
import a
from . import echo
from .. import formats
from ..filters import equalizer