...现在我知道这个问题已被多次询问&我看过这些其他主题。到目前为止,没有任何工作,从使用sys.path.append('。')到导入foo
我有一个python文件,希望导入一个文件(在其父目录中)。你能帮我弄清楚我的子文件如何成功导入其父目录中的文件。我正在使用python 2.7
结构是这样的(每个目录中还包含 __ init __ .py文件):
StockTracker /
的 __ 小样/
的 的 ____ a.py
的 的 ____ SubComp /
的 的 __ _ __ _b.py
在b.py内部,我想导入a.py:所以我尝试了下面的每一个但是我仍然在b.py里面写了一个错误,说“没有这样的模块”
import a
import .a
import Comp.a
import StockTracker.Comp.a
import os
import sys
sys.path.append('.')
import a
sys.path.remove('.')
答案 0 :(得分:11)
from .. import a
应该这样做。这只适用于Python的最新版本 - 从2.6开始,我相信[编辑:从2.5开始]。
每个级别(Comp和Subcomp)也必须有一个__init__.py
文件才能生效。你已经说过了。
答案 1 :(得分:8)
当包构成时 子包(与声音包一样) 在示例中),您可以使用绝对值 导入以引用子模块 兄弟姐妹套餐。例如,如果 模块sound.filters.vocoder需要 使用中的echo模块 sound.effects包,它可以使用 sound.effects import echo。
另外,从Python 2.5开始 到隐式相对导入 如上所述,你可以写 明确的相对进口与 来自模块导入名称导入形式 声明。这些明确的相对 进口使用前导点表示 当前和父包 参与相对进口。从 环绕模块,例如,你 可能会使用:
from . import echo from .. import formats from ..filters import equalizer
从这里引用http://docs.python.org/tutorial/modules.html#intra-package-references
答案 2 :(得分:5)
如果Comp目录在PYTHONPATH环境变量中,则为普通的
import a
会奏效。
如果您正在使用Linux或OS X,并从bash shell启动程序,则可以通过
完成该操作。export PYTHONPATH=$PYTHONPATH:/path/to/Comp
对于Windows,请查看以下链接:
编辑:
要以编程方式修改路径,您在原始问题中处于正确的轨道上。您只需添加父目录而不是当前目录。
sys.path.append("..")
import a