[英]Python gives a Import Error and i don't understand why
我仍在學習如何更好地使用 Python 編寫代碼。 因此我試圖在我的編程中使用一些結構。 諸如 name_conventions 和結構化包裝和模塊之類的東西。
也就是說,我遇到了一個我無法解決的問題,似乎。 我選擇的結構如下:
在 Core controller.py 中,我試圖導入 Stats(object) 類。 我嘗試了幾種不同的方法。 在我的 IDE (Pycharm) 中,它就像一個魅力 ;) 當我嘗試通過命令行啟動它時,我得到了 ImportErrors。 我嘗試了不同的方法。
from Plugins.Stats.controller import Stats
from Plugins.Stats import controller
from Plugins.Stats import controller.Stats
from Plugins import Stats.controller
我還嘗試將Stats
類放入Plugins.Stats.__init__.py
並調用它:
from Plugins.Stats import Stats
我明白了:
Traceback (most recent call last):
File "controller.py", line 4, in <module>
from Plugins.Stats.controller import Stats
ImportError: No module named 'Plugins'
有趣的是......當我嘗試從main.py做同樣的事情時。 它確實有效。 所以我真的很困惑。 難道我做錯了什么?
是否還有特殊的設計模式來處理進口?
首先把From plugin import stats
,然后from stats import controller
和import _init_
如果從終端運行,它只會嘗試從當前文件夾導入。 您必須在文件開頭使用以下代碼手動將主文件夾的路徑添加到此文件
import sys
sys.path.append("../")
如果要備份 2 個文件夾,請添加 ../../ 而不是 ../
您不應該直接將包的子模塊作為腳本啟動。 大多數時候這會弄亂你的層次結構。 而是將其稱為模塊:
python -m Core.controller
您可以通過將其添加到任何腳本的頂部來驗證以下內容:
import sys
for p in sys.path:
print(repr(p))
調用時導入工作的原因如下:
python main.py
is python 會將腳本的目錄添加到 pythonpath (在這種情況下為空字符串''
)
但是,運行時
python Core/controller.py
它會將Core
添加到sys.path
,使項目的其余部分無法sys.path
您可以改為使用
python -m Core.controller
runpy
使用runpy
調用並再次將空字符串放在 python 路徑上。
您可以在此處閱讀有關 python 解釋器調用選項的更多信息: https ://docs.python.org/2/using/cmdline.html 您可以在此處閱讀有關 runpy 的信息: https ://docs.python.org/2/library /runpy.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.