[英]Import a local module in Python - ImportError: Not module named *
我已經閱讀了解決方法(添加到 sys.path或更強大的解決方案),但其他庫不使用此類解決方法(例如,tf 中的此文件)。 我也不希望我真的必須這樣做,我希望能夠在一行中導入並運行- 我一定錯過了一些東西!
具體來說,我有類似以下目錄的內容:
project/
foo/
src/
__init__.py
bar.py
foo/
__init__.py
boo.py
我希望在 bar.py 中我可以簡單地編寫類似from foo import boo
,但是我的 IDE PyCharm 將其視為錯誤。
因此,相信我的 IDE,我嘗試from src.foo import boo
但這會導致 ImportError,經測試:
Traceback (most recent call last):
File "bar.py", line 1, in <module>
from src.foo import boo
ImportError: No module named 'src'
我確認 src 文件夾位於sys.path[0]
,但是向它插入 __file__ 似乎確實解決了問題 - 我仍然不想使用這種解決方法,但作為最后的手段。
我已經嘗試了一百萬種其他技巧來使這個工作沒有成功。
如何在不使用其中一種解決方法的情況下從本地模塊導入?
這里發生了幾件事,所以讓我們分解一下。
上層 foo 目錄混淆了 Pycharms 解析順序。 讓我們試試這個結構:
project/
foo_1.py
src/
__init__.py
bar.py
foo_2.py
默認情況下,Pycharm 假定 project/ 在解析順序中具有優先權。 在我的示例中,如果您開始在 bar.py 中輸入“import f”,Pycharm 的自動完成將建議 foo_1 而不是 foo_2。 因此,當您導入 foo 時,Pycharm 假定它是頂級 foo 並且 boo 無法解析它。
假設 bar.py 有這一行:
import foo_2
如果直接運行 bar.py 它將起作用,因為 Python 將當前工作目錄添加到 Python Path。 但是,從其他任何地方調用它都會遇到麻煩。 編輯 foo_1.py 以獲得這一行:
import src.bar
直接運行 foo_1.py(這使得 CWD project/)和 bar.py 將無法找到 foo_2。 對於將使用您的包並且不使用 project/src 作為 CWD 的任何人來說,這都是一個嚴重的問題,這將是每個人。
標准做法是在分發后命名源文件夾。 假設 'src' 是你的發行版的名稱, bar.py 應該這樣做:
import src.foo_2
我假設你在寫一個包。 如果 bar.py 是一個腳本,因此可能會被直接調用,那么您可以假設它每次都會成功,您應該禁用對該行的檢查:
#noinspection PyUnresolvedRefrences
import foo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.