python筆記40-環境遷移freeze生成requirements.txt


前言

我們用python在本地電腦上開發完成一個python自動化項目用例,或者開發完成一個django項目。
需要部署到另外一台電腦或者服務器上的時候,需要導入python相關的依賴包,可以用freeze一鍵生成requirements.txt文件

  • pip freeze >requirements.txt # 生成一個遷移文件
  • pip install -r requirements.txt # 安裝依賴包

freeze生成文件

比如我在本地電腦開發完成了python的一個項目,會涉及到很多第三方的包,並且版本號都得一一對應,這樣才能保證遷移過去不會有問題。
在不知道freeze這個功能的時候,我是先pip list 查看所有的第三方包,然后一個個pip安裝,感覺挺傻的。
自從看到別人項目里面有個requirements.txt文件,才知道原來可以通過pip freeze一鍵生成

pip freeze >requirements.txt

[root@yoyo ~]# pip freeze >requirements.txt
[root@yoyo ~]# cat requirements.txt 
APScheduler==3.5.3
asn1crypto==0.24.0
# ....太多省略了
xlrd==1.2.0
xlwt==1.3.0
[root@yoyo ~]# 

這樣在當前目錄就會生成一個requirements.txt文件,包當前項目的所有第三方包和版本號都會導出來

pip 安裝

requirements.txt文件生成后,我們不需要一個個pip安裝,可以在requirements.txt文件當前目錄使用pip一鍵安裝

pip install -r requirements.txt

[root@yoyo ~]# pip install -r requirements.txt 
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Requirement already satisfied: APScheduler==3.5.3 in /usr/local/python3/lib/python3.6/site-packages (from -r requirements.txt (line 1)) (3.5.3)
Requirement already satisfied: asn1crypto==0.24.0 in /usr/local/python3/lib/python3.6/site-packages (from -r requirements.txt (line 2)) (0.24.0)
Requirement already satisfied: atomicwrites==1.3.0 in /usr/local/python3/lib/python3.6/site-packages (from -r requirements.txt (line 3)) (1.3.0)
# ....太多省略了
Requirement already satisfied: xlwt==1.3.0 in /usr/local/python3/lib/python3.6/site-packages (from -r requirements.txt (line 62)) (1.3.0)
Requirement already satisfied: setuptools>=0.7 in /usr/local/python3/lib/python3.6/site-packages (from APScheduler==3.5.3->-r requirements.txt (line 1)) (40.6.2)
[root@yoyo ~]# 

本地安裝

如果你們公司的服務器限制了網絡下載,那么只能通過本地安裝了,freeze也可以下載本地包安裝。
假設A服務器是沒有網絡的,你需要在A服務器上安裝python第三方包,那么你先找個可以連網絡的服務器B,在服務器B上先下載需要的安裝包

服務器B上下載安裝包

先使用pip freeze到處需要安裝的包,比如我想安裝以下包

[root@yoyo site-pkg]# cat requirements.txt 
ix==1.12.0
attrs==18.2.0
py==1.7.0
pluggy==0.6.0
atomicwrites==1.3.0
more-itertools==6.0.0
pytest==3.6.3

pip download下載相關安裝包

pip download -r requirements.txt

如果是阿里雲服務器,會出現如下報錯,那么加個參數--trusted-host mirrors.aliyun.com即可

[root@yoyo site-pkg]# pip download -r requirements.txt 
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting ix==1.12.0 (from -r requirements.txt (line 1))
  The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. 
If this repository is available via HTTPS we recommend you use HTTPS instead, 
otherwise you may silence this warning and allow it anyway with '--trusted-host mirrors.aliyun.com'.
  Could not find a version that satisfies the requirement ix==1.12.0 (from -r requirements.txt (line 1)) (from versions: )
No matching distribution found for ix==1.12.0 (from -r requirements.txt (line 1))
You are using pip version 18.1, however version 19.2.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

加上--trusted-host mirrors.aliyun.com參數

pip download -r requirements.txt --trusted-host mirrors.aliyun.com

[root@yoyo site-pkg]# pip download -r requirements.txt --trusted-host mirrors.aliyun.com
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting six==1.12.0 (from -r requirements.txt (line 1))
  File was already downloaded /root/site-pkg/six-1.12.0-py2.py3-none-any.whl
Collecting attrs==18.2.0 (from -r requirements.txt (line 2))
  Downloading http://mirrors.aliyun.com/pypi/packages/3a/e1/5f9023cc983f1a628a8c2fd051ad19e76ff7b142a0faf329336f9a62a514/attrs-18.2.0-py2.py3-none-any.whl
  Saved ./attrs-18.2.0-py2.py3-none-any.whl
Successfully downloaded six attrs py pluggy atomicwrites more-itertools pytest setuptools
[root@yoyo site-pkg]# ll
total 968
-rw-r--r-- 1 root root   5885 Aug 25 23:17 atomicwrites-1.3.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root  34713 Aug 25 23:17 attrs-18.2.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root  52353 Aug 25 23:17 more_itertools-6.0.0-py3-none-any.whl
-rw-r--r-- 1 root root  13723 Aug 25 23:17 pluggy-0.6.0-py3-none-any.whl
-rw-r--r-- 1 root root  83960 Aug 25 23:17 py-1.7.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root 195787 Aug 25 23:17 pytest-3.6.3-py2.py3-none-any.whl
-rw-r--r-- 1 root root    106 Aug 25 23:16 requirements.txt
-rw-r--r-- 1 root root 576332 Aug 25 23:17 setuptools-41.2.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root  10586 Aug 25 23:17 six-1.12.0-py2.py3-none-any.whl
[root@yoyo site-pkg]# 

這樣就可以下載到.whl后綴的本地包了

服務器A上本地安裝

由於服務器A上無法聯網,可以先把上面下載到的相關包傳到服務器A上,然后就可以使用pip本地安裝了.
.whl后綴的包是可以直接使用pip本地安裝的。

pip install pytest-3.6.3-py2.py3-none-any.whl

[root@yoyo site-pkg]# pip install pytest-3.6.3-py2.py3-none-any.whl 
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Requirement already satisfied: pytest==3.6.3 from file:///root/site-pkg/pytest-3.6.3-py2.py3-none-any.whl in /usr/local/python3/lib/python3.6/site-packages (3.6.3)
Requirement already satisfied: pluggy<0.7,>=0.5 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (0.6.0)
Requirement already satisfied: six>=1.10.0 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (1.12.0)
Requirement already satisfied: atomicwrites>=1.0 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (1.3.0)
Requirement already satisfied: more-itertools>=4.0.0 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (6.0.0)
Requirement already satisfied: attrs>=17.4.0 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (18.2.0)
Requirement already satisfied: py>=1.5.0 in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (1.7.0)
Requirement already satisfied: setuptools in /usr/local/python3/lib/python3.6/site-packages (from pytest==3.6.3) (40.6.2)
[root@yoyo site-pkg]# 

如果安裝過程中有的包會有其他的依賴包,需先安裝依賴包,一個個的安裝就可以了。
(注意:windows系統上導出的包,在linux上安裝可能會有失敗的)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM