Requirements.txt你真的清楚嗎
很多Python開源項目在環(huán)境搭建教程中都會提供requirements.txt,所以有必要搞清楚這到底有什么作用以及一些細節(jié)須知,花幾分鐘一起看看吧!
1.如何安裝requirements.txt中的所有內(nèi)容
requirements.txt中包含項目所需依賴的所有庫,如:
library-one==1.0.1
library-two==3.1.4
library-three==100.1.0
要一鍵安裝txt中所指定的3個庫,我們可以運行以下命令:
pip install -r requirements.txt
這將自動安裝 requirements.txt 中指定的每行庫及相應(yīng)版本。
2.如何生成requirements.txt
假設(shè)現(xiàn)在其他人需要運行自己的代碼,那么需要確保兩者運行環(huán)境一致,首先在項目Python環(huán)境的終端中運行如下命令:
pip freeze
該命令將在終端中打印出每個安裝的每個第三方庫以及相應(yīng)版本,如:
absl-py==1.4.0
altair==5.0.1
anyio==3.6.2
appdirs==1.4.4
appnope==0.1.3
argon2-cffi==21.3.0
是不是感覺這就是requirements.txt文件中的內(nèi)容。
現(xiàn)在希望將這些內(nèi)容寫入文本文件中,但又不想手動復(fù)制粘貼它,可以使用以下命令將其寫入:
pip freeze > requirements.txt
該語句的作用是將pip freeze輸出的所有內(nèi)容寫入名為requirements.txt的文本文件中,
這樣,requirements.txt文件制作完畢,接下來是一些須知。
3.最好使用虛擬環(huán)境創(chuàng)建requirements.txt
當我們使用pip freeze時,每個安裝的庫都會出現(xiàn)在你的requirements.txt中。
這可能會很輸出肥腸多的內(nèi)容,如果項目只需要幾個主要庫,但requirements.txt會安裝另外100個不必要的庫,該怎么辦?
使用 Python 虛擬環(huán)境!
python -m venv env # create a virtual environment called 'env'
# activating our Python virtual environment
env\Scripts\activate.bat # Windows
source env\bin\activate # MacOS/Linux
創(chuàng)建新的虛擬環(huán)境后,干凈又衛(wèi)生,沒有安裝任何內(nèi)容。因此,安裝項目所需的主要庫后使用pip freeze,最終出現(xiàn)在requirements.txt中的內(nèi)容將僅包含這些主要內(nèi)容。
4.省略requirements.txt中的版本會如何
這是一個規(guī)范的 requirements.txt:
numpy==1.23.5
pandas==1.5.2
將安裝具有特定版本的numpy與pandas。
如下是一個沒有版本的requirements.txt:
numpy
pandas
將安裝最新版本的numpy與pandas,如果項目中的某些庫是沒有版本依賴的可以這樣做。
5.不一定要命名為requirements.txt
pip install -r requirements.txt
- -r表示read
- requirements.txt只是一個不符合慣例命名的任意文本文件
實際上,可以將其命名為任何名稱,只要它是有效的文本文件名即可,如:
pip install -r a.txt
但不建議這樣做。
6.requirements.txt可以包含其他requirements.txt文件
假設(shè)我們有2個requirements.txt文件:
requirements.txt
requirements_windows.txt
- requirements.txt包含主要內(nèi)容
- requirements_windows.txt包含專門的Windows庫
我們希望requirements_windows.txt也包含requirements.txt內(nèi)的內(nèi)容,可以在requirements_windows.txt中這樣寫:
library-one
library-two
-r requirements.txt
- 首先library-one和library-two將被安裝
- 最后requirements.txt中的所有內(nèi)容也將被安裝