網(wǎng)站首頁 編程語言 正文
實戰(zhàn)場景
在部署Python應用時,需要把第三方庫進行安裝,這里可以使用requirements.txt
文件,其中記錄了所有依賴包以及精確的版本號。
requirements.txt
文件在我們訪問開源 Python項目的時候,極常見。
簡單使用流程概述
使用pip freeze
命令生成requirements.txt
文件,
如下所示:
pip freeze > requirements.txt
請注意:每包都獨占一行,然后是版本號。
生成的文件默認在控制臺執(zhí)行目錄,也可以自定義目錄,創(chuàng)建文件的時候增加文件目錄即可
pip freeze > d:/requirements.txt
其中>
表示重定向,即 freeze 輸出的內(nèi)容送到requirements.txt
文件中。
遷移環(huán)境的時候,注意打包該文件,然后使用如下命令部署
pip install -r requirements.txt
生成 requirements.txt 文件潛在問題
如果生成該文件出現(xiàn)的時候出現(xiàn) warning,建議使用python -m
去執(zhí)行 pip freeze 命令。
如果你創(chuàng)建 Python 程序,或者安裝模塊時,未使用虛擬環(huán)境,那在生成requirements.txt
文件的時候,會將你本地所有的包都進行打包提取,部署前,需要人工進行篩選。
語法格式?在requirements.txt
文件中,可以只寫第三方模塊名稱,不指定版本號,默認安裝最新版本。
如果使用注釋,使用#
加文字內(nèi)容。
模塊名稱與版本號之間可以使用如下符號:
-
==
:等于 -
>
:大于版本 -
>=
:大于等于 -
<
:小于版本 -
<=
:小于等于版本 -
~=
:兼容版本,使用任何大于或等于指定版本,但不大于當前發(fā)行系列的版本,例如~=1.4.3
可以匹配1.4.3
到1.4.9
,但是不能匹配1.5.0
?。
在可選范圍內(nèi),安裝最新版本,當前最優(yōu)先的依舊是等于的版本號。
可以使用逗號,
分隔兩個條件,例如下述代碼:
package_name >= 1.0, <=2.0
使用 requirements.txt 文件的好處
- 不需要每個包都使用 pip 進行安裝
- 不需要確定第三方模塊的版本號
備注
上文提及如果希望 requirements.txt 文件變得精簡,可以使用虛擬環(huán)境實現(xiàn)隔離,它將用戶的軟件包和系統(tǒng)的軟件包進行區(qū)分,允許我們?yōu)槊總€單獨的程序安裝模塊。
常見的虛擬環(huán)境包如下所示:
- virtualenv
- pipenv
但上述介紹存在潛在的問題是:
requirements.txt
文件只包含一級依賴項及其版本,但如果我們的依賴項自身包含其它依賴項(二級以上),這些模塊的版本不一定被鎖定。
此時就可能會出現(xiàn)一個由于版本不對應的問題,導致程序崩潰。
當然使用下述命令可以解決該問題
pip freeze > requirements.txt
但是使用該命令會產(chǎn)生延伸問題,如果你希望刪除一個模塊,如何判斷其關聯(lián)依賴被刪除
在其他編程語言中,會創(chuàng)建2個文件,一個用于定義依賴關系,另一個鎖定所有的次級依賴項及其版本。
解決上述問題,可以使用pip-tools
中的 pip-compile
。
使用 pip-compile
該功能模塊在pip-tools
中,所以需要先安裝該工具。
python -m pip install pip-tools -i https://pypi.douban.com/simple/
安裝完畢會在 Python 的 Scripts 文件夾中生成如下 exe 程序。
然后在你需要生成requirements.txt
的目錄中建立一個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
相關推薦
- 2022-04-01 k8s集群 添加節(jié)點過程記錄及問題解決。
- 2022-03-29 關于使用Redisson訂閱數(shù)問題_Redis
- 2022-03-16 C#?程序通用結構_C#教程
- 2022-02-14 taro將頁面滾動到指定位置
- 2022-03-26 .Net?Core微服務rpc框架GRPC通信基礎_基礎應用
- 2022-04-21 Tomcat解決catalina.out文件過大的問題_Tomcat
- 2023-01-14 React項目中className運用及問題解決_React
- 2023-06-13 python調(diào)試過程中多顏色輸出方式_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支