Python:从父文件夹导入文件

Sas*_*cha 11 python

...现在我知道这个问题已被多次询问了,我已经看过这些其他主题了.到目前为止,没有任何工作,从使用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文件,以便它可以工作.你说他们做到了.


Dix*_*onD 8

当包被组织成子包时(与示例中的声音包一样),您可以使用绝对导入来引用兄弟包的子模块.例如,如果模块sound.filters.vocoder需要在sound.effects包中使用echo模块,它可以使用sound.effects import echo.

从Python 2.5开始,除了上面描述的隐式相对导入之外,您还可以使用import语句的from module import name形式编写显式相对导入.这些显式相对导入使用前导点来指示相对导入中涉及的当前和父包.例如,从环绕声模块,您可以使用:

from . import echo
from .. import formats
from ..filters import equalizer
Run Code Online (Sandbox Code Playgroud)

从这里引用http://docs.python.org/tutorial/modules.html#intra-package-references


Dav*_*man 5

如果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)