Python requirements.txt使用小結(jié)
什么是 requirements.txt
requirements.txt 是 Python 項(xiàng)目中用于記錄項(xiàng)目依賴包及其版本信息的文本文件。它是 Python 生態(tài)系統(tǒng)中管理項(xiàng)目依賴的標(biāo)準(zhǔn)方式,類似于 Node.js 的 package.json 或 Java 的 pom.xml。
requirements.txt 的作用
?? 主要功能
- 依賴管理:記錄項(xiàng)目所需的所有第三方庫
- 環(huán)境復(fù)現(xiàn):確保不同環(huán)境中的依賴版本一致
- 團(tuán)隊(duì)協(xié)作:團(tuán)隊(duì)成員可以快速搭建相同的開發(fā)環(huán)境
- 部署簡化:生產(chǎn)環(huán)境可以一鍵安裝所有依賴
- 版本控制:跟蹤依賴包的版本變化
?? 使用場景
- 項(xiàng)目開發(fā)和維護(hù)
- 代碼版本控制
- 持續(xù)集成/持續(xù)部署 (CI/CD)
- Docker 容器化部署
- 虛擬環(huán)境管理
文件格式說明
基本格式
# 基本格式:包名==版本號(hào) numpy==1.21.0 pandas==1.3.3 requests==2.26.0 # 注釋以 # 開頭 # 這是一個(gè)注釋 # 空行會(huì)被忽略 matplotlib==3.4.3
版本指定方式
# 1. 精確版本 numpy==1.21.0 # 2. 最小版本 numpy>=1.21.0 # 3. 兼容版本(推薦) numpy~=1.21.0 # 等同于 >=1.21.0, <1.22.0 # 4. 版本范圍 numpy>=1.20.0,<1.22.0 # 5. 不等于某版本 numpy!=1.21.1 # 6. 最新版本(不推薦用于生產(chǎn)環(huán)境) numpy
高級(jí)格式
# 從 Git 倉庫安裝 git+https://github.com/user/repo.git@v1.0.0 # 從本地路徑安裝 -e ./local-package # 包含額外依賴 requests[security]==2.26.0 # 從其他 requirements 文件引用 -r base-requirements.txt # 指定索引 URL --index-url https://pypi.org/simple/ --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple/
手動(dòng)創(chuàng)建 requirements.txt
方法一:直接編輯
- 在項(xiàng)目根目錄創(chuàng)建
requirements.txt文件 - 手動(dòng)添加依賴包和版本號(hào)
# Web 框架 django==4.2.0 flask==2.3.0 # 數(shù)據(jù)處理 numpy==1.24.0 pandas==2.0.0 # 數(shù)據(jù)庫 sqlalchemy==2.0.0 psycopg2-binary==2.9.0 # 工具庫 requests==2.28.0 python-dotenv==1.0.0
方法二:逐步添加
# 安裝包時(shí)同時(shí)記錄到 requirements.txt echo "numpy==1.24.0" >> requirements.txt echo "pandas==2.0.0" >> requirements.txt
自動(dòng)生成 requirements.txt
方法一:使用 pip freeze(最常用)
# 生成當(dāng)前環(huán)境所有包的依賴列表 pip freeze > requirements.txt # 查看生成的文件內(nèi)容 cat requirements.txt
優(yōu)點(diǎn):
- 簡單快捷
- 包含所有已安裝的包
- 版本號(hào)精確
缺點(diǎn):
- 包含不必要的依賴
- 可能包含系統(tǒng)級(jí)包
方法二:使用 pipreqs(推薦)
# 安裝 pipreqs pip install pipreqs # 在項(xiàng)目目錄中生成 requirements.txt pipreqs . --encoding=utf8 # 強(qiáng)制覆蓋已存在的文件 pipreqs . --force --encoding=utf8 # 指定輸出文件名 pipreqs . --savepath=my-requirements.txt
優(yōu)點(diǎn):
- 只包含項(xiàng)目實(shí)際使用的包
- 自動(dòng)分析代碼中的 import 語句
- 生成的文件更簡潔
缺點(diǎn):
- 需要額外安裝工具
- 可能遺漏動(dòng)態(tài)導(dǎo)入的包
方法三:使用 pip-tools
# 安裝 pip-tools pip install pip-tools # 創(chuàng)建 requirements.in 文件(高級(jí)依賴) echo "django" > requirements.in echo "requests" >> requirements.in # 生成詳細(xì)的 requirements.txt pip-compile requirements.in # 更新依賴 pip-compile --upgrade requirements.in
方法四:使用 Poetry(現(xiàn)代化方案)
# 安裝 Poetry curl -sSL https://install.python-poetry.org | python3 - # 初始化項(xiàng)目 poetry init # 添加依賴 poetry add django requests # 導(dǎo)出 requirements.txt poetry export -f requirements.txt --output requirements.txt
版本控制最佳實(shí)踐
1. 版本固定策略
# 生產(chǎn)環(huán)境:使用精確版本 django==4.2.1 numpy==1.24.3 # 開發(fā)環(huán)境:可以使用兼容版本 django~=4.2.0 numpy~=1.24.0
2. 分層依賴管理
# 項(xiàng)目結(jié)構(gòu) requirements/ ├── base.txt # 基礎(chǔ)依賴 ├── development.txt # 開發(fā)依賴 ├── production.txt # 生產(chǎn)依賴 └── testing.txt # 測試依賴
base.txt:
django==4.2.1 requests==2.28.2 sqlalchemy==2.0.10
development.txt:
-r base.txt # 開發(fā)工具 django-debug-toolbar==4.0.0 ipython==8.12.0 black==23.3.0 flake8==6.0.0
production.txt:
-r base.txt # 生產(chǎn)環(huán)境專用 gunicorn==20.1.0 psycopg2-binary==2.9.6 redis==4.5.4
3. 虛擬環(huán)境配合使用
# 創(chuàng)建虛擬環(huán)境 python -m venv myenv # 激活虛擬環(huán)境 # Windows myenv\Scripts\activate # Linux/Mac source myenv/bin/activate # 安裝依賴 pip install -r requirements.txt # 生成新的 requirements.txt pip freeze > requirements.txt
常見問題與解決方案
問題1:依賴沖突
# 錯(cuò)誤信息示例 ERROR: pip's dependency resolver does not currently consider all the ways your dependencies can conflict with each other.
解決方案:
# 使用 pip-tools 解決沖突 pip install pip-tools pip-compile --resolver=backtracking requirements.in # 或者手動(dòng)調(diào)整版本 # 將沖突的包版本調(diào)整為兼容版本
問題2:安裝失敗
# 常見錯(cuò)誤 ERROR: Could not find a version that satisfies the requirement
解決方案:
# 1. 更新 pip pip install --upgrade pip # 2. 使用國內(nèi)鏡像源 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 3. 檢查 Python 版本兼容性 python --version # 4. 清理緩存 pip cache purge
問題3:包版本過舊
# 更新所有包到最新版本 pip list --outdated pip install --upgrade -r requirements.txt # 或使用 pip-review pip install pip-review pip-review --local --interactive
問題4:requirements.txt 過大
# 使用 pipdeptree 查看依賴樹 pip install pipdeptree pipdeptree # 只保留頂級(jí)依賴 pipreqs . --force
高級(jí)用法
1. 條件依賴
# 根據(jù) Python 版本安裝不同的包 typing-extensions>=3.7.4; python_version<"3.8" # 根據(jù)操作系統(tǒng)安裝 pywin32>=227; sys_platform=="win32" # 根據(jù)平臺(tái)架構(gòu) tensorflow-macos>=2.9.0; platform_machine=="arm64" and platform_system=="Darwin" tensorflow>=2.9.0; platform_machine!="arm64" or platform_system!="Darwin"
2. 可選依賴
# 主要功能 requests==2.28.2 # 可選功能(需要手動(dòng)安裝) # pip install requests[security] # pip install requests[socks]
3. 開發(fā)工具集成
# 代碼格式化 black==23.3.0 isort==5.12.0 # 代碼檢查 flake8==6.0.0 mypy==1.2.0 # 測試工具 pytest==7.3.0 pytest-cov==4.0.0 # 文檔生成 sphinx==6.1.3
4. 安全掃描
# 安裝安全掃描工具 pip install safety # 掃描 requirements.txt 中的安全漏洞 safety check -r requirements.txt # 生成安全報(bào)告 safety check -r requirements.txt --json > security-report.json
實(shí)際應(yīng)用示例
示例1:Django Web 項(xiàng)目
# Django Web 項(xiàng)目 requirements.txt # Web 框架 Django==4.2.1 django-cors-headers==4.0.0 django-rest-framework==3.14.0 # 數(shù)據(jù)庫 psycopg2-binary==2.9.6 django-redis==5.2.0 # 認(rèn)證和安全 django-allauth==0.54.0 cryptography==40.0.2 # 文件處理 Pillow==9.5.0 django-storages==1.13.2 boto3==1.26.137 # 任務(wù)隊(duì)列 celery==5.2.7 redis==4.5.4 # 監(jiān)控和日志 sentry-sdk==1.22.2 django-extensions==3.2.1 # 開發(fā)工具(僅開發(fā)環(huán)境) # django-debug-toolbar==4.0.0 # ipython==8.12.0
示例2:數(shù)據(jù)科學(xué)項(xiàng)目
# 數(shù)據(jù)科學(xué)項(xiàng)目 requirements.txt # 核心數(shù)據(jù)處理 numpy==1.24.3 pandas==2.0.1 scipy==1.10.1 # 機(jī)器學(xué)習(xí) scikit-learn==1.2.2 xgboost==1.7.5 lightgbm==3.3.5 # 深度學(xué)習(xí) tensorflow==2.12.0 torch==2.0.0 torchvision==0.15.0 # 數(shù)據(jù)可視化 matplotlib==3.7.1 seaborn==0.12.2 plotly==5.14.1 # Jupyter 環(huán)境 jupyter==1.0.0 ipykernel==6.22.0 nbconvert==7.3.1 # 數(shù)據(jù)庫連接 sqlalchemy==2.0.10 pymongo==4.3.3 # 工具庫 requests==2.28.2 tqdm==4.65.0 python-dotenv==1.0.0
示例3:API 服務(wù)項(xiàng)目
# FastAPI 服務(wù)項(xiàng)目 requirements.txt # Web 框架 fastapi==0.95.2 uvicorn[standard]==0.22.0 # 數(shù)據(jù)驗(yàn)證 pydantic==1.10.7 email-validator==2.0.0 # 數(shù)據(jù)庫 sqlalchemy==2.0.10 alembic==1.10.4 psycopg2-binary==2.9.6 # 認(rèn)證 python-jose[cryptography]==3.3.0 passlib[bcrypt]==1.7.4 python-multipart==0.0.6 # HTTP 客戶端 httpx==0.24.1 aiofiles==23.1.0 # 緩存 redis==4.5.4 aioredis==2.0.1 # 配置管理 python-dotenv==1.0.0 pydantic-settings==2.0.0 # 監(jiān)控 prometheus-client==0.16.0 # 測試(開發(fā)環(huán)境) # pytest==7.3.1 # pytest-asyncio==0.21.0 # httpx==0.24.1
示例4:自動(dòng)化腳本項(xiàng)目
# 自動(dòng)化腳本項(xiàng)目 requirements.txt # Web 自動(dòng)化 selenium==4.9.0 beautifulsoup4==4.12.2 requests==2.28.2 # 文件處理 openpyxl==3.1.2 Pillow==9.5.0 PyPDF2==3.0.1 # 系統(tǒng)操作 psutil==5.9.5 watchdog==3.0.0 schedule==1.2.0 # 配置和日志 python-dotenv==1.0.0 loguru==0.7.0 click==8.1.3 # 網(wǎng)絡(luò)工具 requests==2.28.2 urllib3==2.0.2 # 數(shù)據(jù)處理 pandas==2.0.1 numpy==1.24.3
?? 總結(jié)
requirements.txt 是 Python 項(xiàng)目依賴管理的核心工具,正確使用它可以:
- 提高開發(fā)效率:快速搭建開發(fā)環(huán)境
- 確保環(huán)境一致性:避免"在我機(jī)器上能運(yùn)行"的問題
- 簡化部署流程:一鍵安裝所有依賴
- 便于團(tuán)隊(duì)協(xié)作:統(tǒng)一的依賴管理標(biāo)準(zhǔn)
- 支持版本控制:跟蹤依賴變化歷史
最佳實(shí)踐建議
- ? 使用虛擬環(huán)境隔離項(xiàng)目依賴
- ? 定期更新和維護(hù) requirements.txt
- ? 使用版本固定避免意外更新
- ? 分層管理不同環(huán)境的依賴
- ? 定期進(jìn)行安全掃描
- ? 避免在全局環(huán)境中生成 requirements.txt
- ? 不要忽略依賴沖突警告
- ? 避免使用過于寬泛的版本范圍
通過合理使用 requirements.txt,你的 Python 項(xiàng)目將更加規(guī)范、可維護(hù)和可部署。
到此這篇關(guān)于Python requirements.txt使用小結(jié)的文章就介紹到這了,更多相關(guān)Python requirements.txt使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python生成requirements.txt的兩種方法
- 詳解python中requirements.txt的一切
- python?中的requirements.txt?文件的使用詳情
- python導(dǎo)出requirements.txt的幾種方法總結(jié)
- python生成requirements.txt文件的兩種方法
- Python pip通過requirements.txt 文件安裝依賴
- Python如何生成requirements.txt
- python項(xiàng)目下生成requirements.txt方法
- Python?requirements.txt的具體使用
- python生成requirements.txt文件的推薦方法
- python項(xiàng)目中requirements.txt的用法實(shí)例教程
相關(guān)文章
Python實(shí)現(xiàn)列表刪除重復(fù)元素的三種常用方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)列表刪除重復(fù)元素的三種常用方法,結(jié)合實(shí)例形式對(duì)比分析了Python針對(duì)列表元素的遍歷、判斷、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Python實(shí)現(xiàn)tuple和list的轉(zhuǎn)換方式
在Python中,可以使用內(nèi)置的list()和tuple()函數(shù)將tuple和list相互轉(zhuǎn)換,tuple是不可變的,而list是可變的,轉(zhuǎn)換時(shí)要注意性能考慮2024-12-12
Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法
這篇文章主要介紹了Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
淺談django2.0 ForeignKey參數(shù)的變化
今天小編就為大家分享一篇淺談django2.0 ForeignKey參數(shù)的變化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
利用Chatgpt開發(fā)一款加減乘除計(jì)算器(Python代碼實(shí)現(xiàn))
這篇文章主要為大家詳細(xì)介紹了如何利用Chatgpt開發(fā)一款加減乘除計(jì)算器(用Python代碼實(shí)現(xiàn)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02
python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
本文主要介紹了python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Python中將嵌套列表扁平化的多種實(shí)現(xiàn)方法
在Python編程中,我們常常會(huì)遇到需要將嵌套列表(即列表中包含列表)轉(zhuǎn)換為一個(gè)一維的扁平列表的需求,本文將給大家介紹了多種實(shí)現(xiàn)這一目標(biāo)的方法,需要的朋友可以參考下2025-07-07

