首頁 >後端開發 >Python教學 >在 Python 中匯入同級套件時如何避免「sys.path」駭客攻擊?

在 Python 中匯入同級套件時如何避免「sys.path」駭客攻擊?

Patricia Arquette
Patricia Arquette原創
2024-12-11 13:56:10145瀏覽

How Can I Avoid `sys.path` Hacks When Importing Sibling Packages in Python?

同級套件導入:無痛方法

處理 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn