Python項目如何打包?
本指南總結了Python項目打包的最佳實踐,主要涉及代碼的打包和分發,以及環境和依賴的管理。
0. 一般項目清單
- 源代碼(可使用git托管)
- 數據包(可使用DVC托管)
- Docker環境鏡像(可使用docker hub托管)
1. 代碼打包
- 使用 setuptools: 對于 Python 代碼,使用 setuptools 創建一個 setup.py或pyproject.toml 文件,它描述了你的項目及其依賴。這允許其他人使用 pip install 來安裝你的項目。我們以toml為例,展現一個基本的啟動文件:(關于toml文件的更多解釋可參考基于pyproject.toml的包管理(setuptools))
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"[project]
name = "apss"
version = "0.3.0"
description = "一種基于神經網絡和啟發式策略的深度學習模型分布式訓練切分(3D parallelism)快速策略搜索算法"
readme = "README.md"
requires-python = ">=3.7"
classifiers = ["Programming Language :: Python :: 3",
]
dependencies = ["mindspore>=2.1.1", "tensorboard_logger","numpy", "tqdm",
][project.urls]
"Homepage" = "https://github.com/Cheny1m/APSS"[tool.setuptools.packages.find]
exclude = ["benchmark*","dist*","script*"][tool.wheel]
exclude = ["benchmark*","dist*","script*"]
- 結構化你的項目: 確保你的項目有一個清晰的結構。通常包括源代碼目錄(如 src 或項目名稱)、測試目錄(tests或benchmark)、文檔目錄(docs)、自動化腳本目錄(scripts)等。
- 包含必要的文件: 除了源代碼外,還應該包括 README.md(項目說明)、LICENSE(許可證)、.gitignore(Git 忽略規則)、config.json(可能的配置設置)、requirements.txt(可能的依賴提示)等文件。
# .gitignore例子# data & log & output
resource/# built binaries
dist# vscode
.vscode/# cache
*__pycache__
*.egg-info# pickle
*.pkl
2. 數據和資源
- 分離大型數據: 如果項目包含大型數據文件或其他資源(如圖像、模型等),最好不要直接包含在代碼包中。可以將它們托管在網絡上,如云存儲(AWS S3、Google Cloud Storage 等),并在文檔中提供下載鏈接或腳本。
- 使用數據管理工具: 對于數據科學項目,考慮使用如 DVC(Data Version Control)之類的工具協同git來管理數據。
3. 環境和依賴管理
- requirements.txt: 為項目創建一個 requirements.txt 文件,列出所有的依賴項,以便其他人可以使用 pip install -r requirements.txt 來安裝依賴。
- 使用虛擬環境: 推薦在開發時使用虛擬環境(如 venv 或 conda),這有助于隔離依賴并確保項目的可移植性。
- 考慮使用 Docker: 對于更復雜的項目,尤其是涉及多個服務或特定系統依賴時,考慮使用 Docker 容器來打包你的應用及其環境。打包好的docker可以上傳至docker hub供用戶下載。
4. 文檔和示例
- 寫明確的文檔: 提供清晰、詳細的文檔,說明如何安裝、配置和使用你的項目。如果可能,包括一些示例和教程。
- 包含運行示例: 提供一些示例腳本或 Jupyter 筆記本,展示如何使用你的項目。
5. 測試和持續集成
- 編寫測試: 為你的代碼編寫單元測試和(如果適用)集成測試。
- 設置 CI/CD: 考慮使用持續集成/持續部署(CI/CD)工具,如 GitHub Actions 或 Travis CI,來自動化測試和部署流程。
6. 發布到 PyPI
- 發布包: 如果你的項目是一個庫,并且你希望它被廣泛使用,可以考慮將其發布到 PyPI 上,讓人們可以通過 pip 直接安裝。自動化腳本upload_pypi.sh:
rm -rf dist
python3 -m build
python3 -m twine upload dist/*
7. 版本控制
- 使用 Git: 使用 Git 進行版本控制,并在 GitHub 或其他平臺上托管代碼,這不僅有助于團隊協作,也方便分享和反饋。
8. 遵守開源協議
- 選擇合適的許可證: 如果你打算開源你的項目,選擇一個合適的開源許可證(如 MIT、GPL、Apache 等)。
9.驗證打包是否正確(創建新環境)
- 使用Git拉取源代碼和數據文件,使用docker下載好所需要的image。
- 啟動docker容器并將源代碼和數據文件映射進容器。
- pip安裝項目(從源碼構建 – 進入項目根目錄后執行:pip install -e . ;如果上傳到了pypi,可以使用pip install xxx)
- 執行主腳本,看是否能夠正常運行。