zoukankan      html  css  js  c++  java
  • 从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守护进程

     

  • 相关阅读:
    Uva 10779 collector's problem
    poj 2728 最优比率树(最小生成树问题)
    LA 3126 二分图匹配 最小路径覆盖
    poj 1149 最大流构图
    Step By Step(Java XML篇)
    Step By Step(Java 输入输出篇)
    Step By Step(Java 集合篇)
    Step By Step(Java 线程篇)
    Step By Step(Java 反射篇)
    Step By Step(Java 国际化篇)
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11771251.html
Copyright © 2011-2022 走看看