...现在我知道这个问题已被多次询问了,我已经看过这些其他主题了.到目前为止,没有任何工作,从使用sys.path.append('.')到导入foo
我有一个python文件,希望导入一个文件(在其父目录中).你能帮我弄清楚我的子文件如何成功导入其父目录中的文件.我正在使用python 2.7
结构是这样的(每个目录中都有__ init __ .py文件):
StockTracker/
__ Comp /
____ 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('.')
Run Code Online (Sandbox Code Playgroud)
Tho*_*s K 11
from .. import a
Run Code Online (Sandbox Code Playgroud)
应该这样做.这只适用于最新版本的Python - 从2.6开始,我相信[编辑:自2.5以来].
每个级别(Comp和Subcomp)也必须有一个__init__.py文件,以便它可以工作.你说他们做到了.
当包被组织成子包时(与示例中的声音包一样),您可以使用绝对导入来引用兄弟包的子模块.例如,如果模块sound.filters.vocoder需要在sound.effects包中使用echo模块,它可以使用sound.effects import echo.
从Python 2.5开始,除了上面描述的隐式相对导入之外,您还可以使用import语句的from module import name形式编写显式相对导入.这些显式相对导入使用前导点来指示相对导入中涉及的当前和父包.例如,从环绕声模块,您可以使用:
Run Code Online (Sandbox Code Playgroud)from . import echo from .. import formats from ..filters import equalizer
从这里引用http://docs.python.org/tutorial/modules.html#intra-package-references
如果Comp目录位于PYTHONPATH环境变量中,则为普通旧目录
import a
Run Code Online (Sandbox Code Playgroud)
将工作.
如果你正在使用Linux或OS X,并从bash shell启动你的程序,你可以通过
export PYTHONPATH=$PYTHONPATH:/path/to/Comp
Run Code Online (Sandbox Code Playgroud)
对于Windows,请查看以下链接:
编辑:
要以编程方式修改路径,您在原始问题中处于正确的轨道上.您只需添加父目录而不是当前目录.
sys.path.append("..")
import a
Run Code Online (Sandbox Code Playgroud)