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

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

Patricia Arquette
發布: 2024-12-11 13:56:10
原創
135 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板