簡體   English   中英

使用 __init__.py 從目錄導入本地 python 模塊

[英]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.pymodule/__init__.py文件。

默認情況下,啟動后sys.path包含:

  • 當前目錄 ( "" )
  • PYTHONPATH指定的目錄
  • Python 內置路徑
  • PYTHONUSERBASE指定的本地站點包
  • 系統站點包(或 virtualenv 站點包)

您無法導入osprojmine因為root目錄不滿足任何這些條件。

第一次,您可以:

  • root目錄運行python
  • root目錄永久或臨時添加到您的PYTHONPATH
     env PYTHONPATH=/path/to/root:${PYTHONPATH} python ...

但這是窮人的解決方案,最好是使用setuptools打包您的項目並在本地站點包、命名用戶方案或 virtualenv 站點包中安裝它(最終在開發模式下)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM