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