網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
實(shí)戰(zhàn)場(chǎng)景
在部署Python應(yīng)用時(shí),需要把第三方庫(kù)進(jìn)行安裝,這里可以使用requirements.txt
文件,其中記錄了所有依賴包以及精確的版本號(hào)。
requirements.txt
文件在我們?cè)L問(wèn)開(kāi)源 Python項(xiàng)目的時(shí)候,極常見(jiàn)。
簡(jiǎn)單使用流程概述
使用pip freeze
命令生成requirements.txt
文件,
如下所示:
pip freeze > requirements.txt
請(qǐng)注意:每包都獨(dú)占一行,然后是版本號(hào)。
生成的文件默認(rèn)在控制臺(tái)執(zhí)行目錄,也可以自定義目錄,創(chuàng)建文件的時(shí)候增加文件目錄即可
pip freeze > d:/requirements.txt
其中>
表示重定向,即 freeze 輸出的內(nèi)容送到requirements.txt
文件中。
遷移環(huán)境的時(shí)候,注意打包該文件,然后使用如下命令部署
pip install -r requirements.txt
生成 requirements.txt 文件潛在問(wèn)題
如果生成該文件出現(xiàn)的時(shí)候出現(xiàn) warning,建議使用python -m
去執(zhí)行 pip freeze 命令。
如果你創(chuàng)建 Python 程序,或者安裝模塊時(shí),未使用虛擬環(huán)境,那在生成requirements.txt
文件的時(shí)候,會(huì)將你本地所有的包都進(jìn)行打包提取,部署前,需要人工進(jìn)行篩選。
語(yǔ)法格式?在requirements.txt
文件中,可以只寫第三方模塊名稱,不指定版本號(hào),默認(rèn)安裝最新版本。
如果使用注釋,使用#
加文字內(nèi)容。
模塊名稱與版本號(hào)之間可以使用如下符號(hào):
-
==
:等于 -
>
:大于版本 -
>=
:大于等于 -
<
:小于版本 -
<=
:小于等于版本 -
~=
:兼容版本,使用任何大于或等于指定版本,但不大于當(dāng)前發(fā)行系列的版本,例如~=1.4.3
可以匹配1.4.3
到1.4.9
,但是不能匹配1.5.0
?。
在可選范圍內(nèi),安裝最新版本,當(dāng)前最優(yōu)先的依舊是等于的版本號(hào)。
可以使用逗號(hào),
分隔兩個(gè)條件,例如下述代碼:
package_name >= 1.0, <=2.0
使用 requirements.txt 文件的好處
- 不需要每個(gè)包都使用 pip 進(jìn)行安裝
- 不需要確定第三方模塊的版本號(hào)
備注
上文提及如果希望 requirements.txt 文件變得精簡(jiǎn),可以使用虛擬環(huán)境實(shí)現(xiàn)隔離,它將用戶的軟件包和系統(tǒng)的軟件包進(jìn)行區(qū)分,允許我們?yōu)槊總€(gè)單獨(dú)的程序安裝模塊。
常見(jiàn)的虛擬環(huán)境包如下所示:
- virtualenv
- pipenv
但上述介紹存在潛在的問(wèn)題是:
requirements.txt
文件只包含一級(jí)依賴項(xiàng)及其版本,但如果我們的依賴項(xiàng)自身包含其它依賴項(xiàng)(二級(jí)以上),這些模塊的版本不一定被鎖定。
此時(shí)就可能會(huì)出現(xiàn)一個(gè)由于版本不對(duì)應(yīng)的問(wèn)題,導(dǎo)致程序崩潰。
當(dāng)然使用下述命令可以解決該問(wèn)題
pip freeze > requirements.txt
但是使用該命令會(huì)產(chǎn)生延伸問(wèn)題,如果你希望刪除一個(gè)模塊,如何判斷其關(guān)聯(lián)依賴被刪除
在其他編程語(yǔ)言中,會(huì)創(chuàng)建2個(gè)文件,一個(gè)用于定義依賴關(guān)系,另一個(gè)鎖定所有的次級(jí)依賴項(xiàng)及其版本。
解決上述問(wèn)題,可以使用pip-tools
中的 pip-compile
。
使用 pip-compile
該功能模塊在pip-tools
中,所以需要先安裝該工具。
python -m pip install pip-tools -i https://pypi.douban.com/simple/
安裝完畢會(huì)在 Python 的 Scripts 文件夾中生成如下 exe 程序。
然后在你需要生成requirements.txt
的目錄中建立一個(gè)requirements.in
文件,其中可以寫入你需要的模塊
requests == 2.27.0
然后執(zhí)行pip-compile
命令,輸出內(nèi)容如下所示:
requirements.txt 文件代碼如下:
# # This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile # certifi==2021.10.8 # via requests charset-normalizer==2.0.12 # via requests idna==3.3 # via requests requests==2.27.0 # via -r requirements.in urllib3==1.26.9 # via requests
原文鏈接:https://juejin.cn/post/7080328282113048583
相關(guān)推薦
- 2022-08-28 PostgreSQL常用字符串分割函數(shù)整理匯總_PostgreSQL
- 2023-11-16 【云原生】服務(wù)器重啟后,如何將dockers和docker里的服務(wù)重啟
- 2022-11-30 Go語(yǔ)言k8s?kubernetes使用leader?election實(shí)現(xiàn)選舉_Golang
- 2022-06-30 Oracle在PL/SQL中使用子查詢_oracle
- 2022-07-28 Redis基本數(shù)據(jù)類型Zset有序集合常用操作_Redis
- 2022-03-30 Android中圖片占用內(nèi)存的深入分析_Android
- 2022-02-01 for循環(huán)中嵌套異步請(qǐng)求導(dǎo)致順序錯(cuò)亂
- 2023-06-02 Pandas計(jì)算元素的數(shù)量和頻率的方法(出現(xiàn)的次數(shù))_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支