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