處理 Python 導入時,遇到同級套件導入問題可能會令人沮喪。讓我們探索一種替代可怕的 sys.path.insert hack 的方法來解決此問題。
考慮以下項目結構:
├── LICENSE.md ├── README.md ├── api │ ├── __init__.py │ ├── api.py │ └── api_key.py ├── examples │ ├── __init__.py │ ├── example_one.py │ └── example_two.py └── tests │ ├── __init__.py │ └── test_one.py
當您嘗試從範例和測試目錄中的api模組導入時,您可能會遇到以下錯誤:
ModuleNotFoundError: No module named 'api'
這裡有一個Pythonic,而不是訴諸sys.path hacks解決方案:
第1 步:建立pyproject.toml檔案
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"
第2 步:使用pip -e 安裝
如果需要,啟動您的虛擬環境,然後將您的專案安裝在可編輯的環境中state:
pip install -e .
第 3步驟:調整導入
修改先前無法從api 模組匯入的檔案中的匯入以包含專案名稱,例如:
from myproject.api.api import function_from_api
a pi.py
def function_from_api(): return 'I am the return value from api.api!'
test_one.py
from myproject.api.api import function_from_api def test_function(): print(function_from_api()) if __name__ == '__main__': test_function()
運送行測試
確保您仍在虛擬環境中並執行以下操作:
python .\myproject\tests\test_one.py
輸出:
I am the return value from api.api!
以上是在 Python 中匯入同級套件時如何避免「sys.path」駭客攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!