前言
我們用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上安裝可能會有失敗的)