![](/img/trans.png)
[英]Difference between python 2.7 and 3.3+ when importing in __init__.py and module from same directory
[英]Importing local python module from directory with __init__.py
我一直在研究一個需要編輯和使用開源項目的項目,我們稱之為 osproj。 我將包含已編輯腳本的文件夾重命名為 osprojmine。
這是一個示例目錄結構:
root/
mycode.py
osprojmine/
__init__.py
foo.py
bar.py
在 mycode.py 我有導入語句
import osprojmine as osproj
我已經能夠在osproj.module()
中使用osproj.module()
和osproj.class()
沒有任何問題,並且一切運行順利。
當我將文件發送給我的同事時,問題就出現了。 他正在得到一個ModuleNotFoundError: No module named 'osprojmine'
我正在使用 python 3.8.5。 他在 3.9.6 並嘗試降級。
似乎他的 python 解釋器沒有將 osprojmine 識別為 python 包,但在我這邊呢? 很迷惑。 我對這個領域比較陌生,所以歡迎提出任何建議!
同事(以及您)應該將代碼運行為:
$ cd root
$ python -m mycode
這樣絕對導入將被解決
導入模塊時,python 在sys.path
中指定的目錄中執行查找以查找module.py
或module/__init__.py
文件。
默認情況下,啟動后sys.path
包含:
""
)PYTHONPATH
指定的目錄PYTHONUSERBASE
指定的本地站點包 您無法導入osprojmine
因為root
目錄不滿足任何這些條件。
第一次,您可以:
root
目錄運行pythonroot
目錄永久或臨時添加到您的PYTHONPATH
: env PYTHONPATH=/path/to/root:${PYTHONPATH} python ...
但這是窮人的解決方案,最好是使用setuptools打包您的項目並在本地站點包、命名用戶方案或 virtualenv 站點包中安裝它(最終在開發模式下)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.