背景:
已經使用pip+requirements.txt+virtualenv管理了項目一段時間,為了不要每次都 導出依賴(本地),安裝依賴(服務器)
現在要使用pipenv來管理項目的依賴關系
思路:
主要是在本地項目中生成pipfile文件,並將其提到git,然后在服務器clone下包含pipfile的文件,並通過pipenv 生成新的依賴環境
2端的操作基本相同,都是先使用pip安裝pipenv,然后再使用pipenv初始化虛擬環境。
這里不用擔心,如果你的項目中已經使用requirements.txt管理依賴了,在使用pipevn初始化環境的時候,會直接根據requirements.txt生成pipfile,而無須一個依賴一個依賴的重新安裝。
【客戶端操作】
step1:使用命令pip install pipenv安裝pipenv
pip install pipenv
step2:cd到項目根目錄,使用命令pipenv install初始化環境
pipenv install
如果項目中有requirements.txt文件,pipenv 會根據requirements.txt生成pipfile,而不用我們再重新逐個安裝依賴。很方便
使用pipenv shell命令可以顯示的激活虛擬環境,並顯示虛擬環境的安裝目錄,pipenv創建的虛擬環境名稱形式為:“當前項目目錄名”+一串隨機字符,
比如:gotest_official-FJrPcT2s
(gotest) Mac mini:gotest_official 5i5j$ pipenv shell Launching subshell in virtual environment… . /Users/5i5j/.local/share/virtualenvs/gotest_official-FJrPcT2s/bin/activate (gotest) Mac mini:gotest_official 5i5j$ . /Users/5i5j/.local/share/virtualenvs/gotest_official-FJrPcT2s/bin/activate
step3:如果使用pycharm編輯項目,這時候需要更換項目的虛擬環境
step4:測試新的虛擬環境是否正常使用
使用flask run 命令啟動項目,如果能啟動成功,則說明虛擬環境遷移成功
【服務器端-CentOS7】
環境 python2 與 python3.6環境並存,原來安裝依賴是通過 pip3 install xxx的方式
step1:安裝pipenv
首先使用pip安裝pipenv,如果在linux或macOS系統中使用sudo以全局安裝
pip3 install pipenv
可以看到pipenv的安裝目錄 ,證明安裝成功了
pipenv in /usr/local/python3/lib/python3.6/site-packages (2018.11.26)
但是使用命令檢查pipenv是否已經安裝,卻報錯:pipenv 未找到命令
pipenv --version
報錯信息:
[root@67 ~]# pipenv
bash: pipenv: 未找到命令...
解決辦法:
執行下面命令,為 Pipenv 可執行文件設置軟鏈接,之后可以通過 pipenv
命令來使用 Pipenv
[root@67 ~]# ln -s /usr/local/python3/bin/pipenv /usr/bin/pipenv
[root@67 ~]# pipenv --version
pipenv, version 2018.11.26
由此可見/usr/bin/下的命令都是全局可以使用的。
step2:創建虛擬環境
git 克隆已經上傳了pipfile的項目 goTest至服務器
cd到項目目錄,然后使用pipenv install命令為當前項目創建虛擬環境
這里使用jenkins自動布署,所以目錄是 ~/.jenkins/workspace/goTest
[root@67 ~]# cd ~/.jenkins/workspace/goTest
[root@67 goTest]# ls
app log Pipfile Pipfile.lock __pycache__ README.md wsgi.py
使用命令pipenv install 初始化pipenv虛擬環境:
pipenv install
報錯: python3.7 was not found on your system:
[root@67 goTest]# pipenv install
Warning: Python 3.7 was not found on your system… You can specify specific versions of Python with: $ pipenv --python path/to/python
這是因為 :Pipfile中指定的python version是3.7,但服務器的python是3.6.2版本
Your Pipfile requires python_version 3.7, but you are using 3.6.2 (/root/./g/bin/python).
解決辦法:
使用命令:pipenv install --three 指定pipenv創建python3的虛擬環境
pipenv install --three Creating a virtualenv for this project… Pipfile: /root/.jenkins/workspace/goTest/Pipfile Using /usr/bin/python3 (3.6.2) to create virtualenv… ⠼ Creating virtual environment...
python3虛擬環境初始化成功
查看服務器中所有的虛擬環境,可以看到pipenv 已經成功為goTest項目創建了1個虛擬環境
[root@67 goTest]# lsvirtualenv
automationVenv ============== flaskApi ======== goTest-KQB7Q94I #pipenv創建的虛擬環境
=============== rlcVenv =======
stetp3:測試
使用命令 pipenv shell 激活當前虛擬環境
[root@67 goTest]# pipenv shell
Warning: Your Pipfile requires python_version 3.7, but you are using 3.6.2 (/root/./g/bin/python).
$ pipenv --rm and rebuilding the virtual environment may resolve the issue.
$ pipenv check will surely fail.
Launching subshell in virtual environment…
. /root/.virtualenvs/goTest-KQB7Q94I/bin/activate
[root@67 goTest]# . /root/.virtualenvs/goTest-KQB7Q94I/bin/activate
使用flask run命令運行項目,項目運行成功,說明更換依賴環境成功了
(goTest) [root@67 goTest]# flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
【pipenv其它命令】
使用命令pipenv --venv 可以查看虛擬環境所在目錄
pipenv --venv
使用exit命令退出當前虛擬環境
(goTest) [root@67 workspace]# exit
exit
[root@67 goTest]#
刪除舊的依賴環境
rmvirtualenv <原來的虛擬環境名稱>
ps,使用rmvirtualenv命令的前堤是,已經安裝了virtualenvwrapper
題外話,即使使用了pipenv,virtualenvwrapper也是管理虛擬環境非常棒的工具,它可以很方便查看 刪除虛擬環境
【很重要!】
【修改布署方式】
step1:修改jenkins執行shell,通過pipenv install --three更新依賴
jenkins重新布署后,訪問接口報錯:
問題分析及解決辦法:
1.這是因為之前的布署方式是通過nginx+gunicorn+supervisord
2.而supervisord又通過1個配置文件啟動gunicron,這樣才能成功建立gunicorn和nginx之間地址的映射
3.現在gunicron所在的環境目錄變了,所以我們也需要修改supervisord啟動gunicorn的目錄地址
step2:修改supervisord配置文件gunicorn啟動目錄
# supervisor的程序名字
[program:gotest] #program_name 該名稱可以隨意設置 # supervisor執行的命令
command=/root/.virtualenvs/goTest-KQB7Q94I/bin/gunicorn -w 4 -b 127.0.0.1:5000 wsgi:app #修改gunicorn命令的啟動目錄
step3:重新加載 supervisorctl配置
[root@67 etc]# supervisorctl reload
Restarted supervisord
step4:測試再次請求接口,正常返回響應信息,說明環境遷移成功
參考文檔:
pipenv 安裝pipfile的依賴包
CentOS 下使用 Pipenv + Gunicorn + Supervisor 部署 Flask 程序
【Centos7】 中使用Supervisor守護進程