所以我看了一下這裏提到的各種類似的問題,但到目前爲止我沒有任何工作。從子文件夾導入模塊到父項
我有以下文件結構:
\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