從pip+requirements.txt+virtualenv管理依賴到使用pipenv管理依賴-修改布署方式


背景:

  已經使用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守護進程

 


免責聲明!

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



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