所以我看了一下这里提到的各种类似的问题,但到目前为止我没有任何工作。从子文件夹导入模块到父项
我有以下文件结构:
\folder
__init__.py
supClass.py
script1.py
\sub
__init__.py
script2.py
所以在script2.py我尝试导入supClass。如果我理解我在相关主题上阅读的内容,我必须指定\folder
是PYTHONPATH的一部分。
所以下面的例子我看了,我结束了这段代码:
if __name__ == '__main__' and __package__ is None:
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from test_package import supClass
a = supClass()
a.print_sup()
,但我得到了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Donnees/Programmes_Python/Developpement/Tests/test_package/sub/script.py", line 18, in <module>
from test_package import supClass
ImportError: No module named test_package
我检查\文件夹是现在的一部分PYTHONPATH在做
import sys
print sys.path
在我的控制台,没关系。但是,__package__
变量保持设置为无。
我得到的错误似乎说我的\folder
不是一个模块。我不明白为什么,也许我在“包”和“模块”之间混淆了事物。
无论如何,如果有人有一个想法,它将不胜感激!
'\ folder'的* parent *应该在'PYTHONPATH'上。假设'folder' =='test_package',然后你可以通过test_package import subClass和test_package.sub import script2来完成。请注意,从子文件夹执行脚本是有问题的(但如果您编写'setup.py'文件则很容易)。有关更多信息,请参阅我的答案http://stackoverflow.com/a/41201868/75103。 – thebjorn
这个工程!谢谢!但是,你能解释为什么\文件夹的父母应该在PYTHONPATH上,而不仅仅是\文件夹本身? –
由于'folder'是你的*包*,并且'import folder',因此Python需要查看包含*'文件夹'的目录。 – thebjorn