从同级目录导入Python

时间:2018-09-10 14:05:07

标签: python python-import

免责声明:在搜索了成千上万个非常相似的供稿后,最终却最终解决了一个略有不同的问题,我想我必须提出一个新的问题(尽管我确信存在一个在某处回答->如果您知道,请指出;)

问题::我正在使用Python 2,正在使用此树构建项目:

project
├── __init__.py
├── foo  
│   └── __init__.py
│   └── bar   
│       └── __init__.py
├── notebooks   
│   └── __init__.py
│   └── skript.py
└── test
    └── __init__.py
    └── foo   
        └── __init__.py
        └── bar   
            └── __init__.py
            └── file.py

现在,我想从project/notebooks/skript.py中加载test.foo.bar。因此,我会在那张短裙中

import sys
sys.path.append('../')

如果我再运行

import test.foo.bar  # or: import test.foo

python告诉我

ImportError: No module named foo.bar

(或分别为ImportError: No module named foo)。通常,import test不会引发错误,但是如果我随后执行test.foo,则会引发AttributeError: 'module' object has no attribute 'foo'

所以我想知道,这里出了什么问题以及如何解决?


修改

此外,我尝试将其添加到skript.py

import sys
import os
MYDIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(MYDIR,'../test'))
sys.path.append(os.path.join(MYDIR,'../test/foo'))
sys.path.append(os.path.join(MYDIR,'../test/foo/bar')) #I am not sure this is entirely needed
如下所述。还是

import test.foo.bar.file

或     从test.foo.bar导入文件 只是产生

ImportError: No module named foo.bar

相同
sys.path.append('../test/foo/bar')
import test.foo.bar.file

我仍然不知道怎么了?

2 个答案:

答案 0 :(得分:1)

它应该与

一起使用
from test import foo

但是您必须在项目目录中添加__init__.py

对于Python 3,它将是:

from .test import foo

如果在文件夹名称前使用点号,则python将在与您正在处理的文件所在目录相同的目录中搜索文件。

对不起,我的英语不好。

答案 1 :(得分:0)

您是否正在使用IDE?如果是这样,请在项目“属性”内的“ Python解释器”的路径中添加所有主要包(foo,test,notebooks)。否则,尝试像这样

明确地将bar软件包添加到sys路径中
import sys
import os
MYDIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(MYDIR,'test'))
sys.path.append(os.path.join(MYDIR,'test/foo'))
sys.path.append(os.path.join(MYDIR,'test/foo/bar')) #I am not sure this is entirely needed