• Linux--安装python虚拟环境


    前戏

    大家都知道我们使用pip安装python库的时候,是去pypi下载的地址:https://pypi.python.org/pypi

    并不是所有的扩展库都支持 pip 命令安装。对于个别库来可能只提供了压缩包文件,或者我们安装的环境并不能上网。这个时候就不能 pip 命令安装了。

    比如要安装django, Django-1.10.2.tar.gz 文件进行下载,然后进行解压,进入解压目录,通过“python”命令安装。Django-1.10.2>python setup.py install

    还有一种是wheel,本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 Python 模块的安装。

    Django 提供了.whl 文件的安装包。同样先下载 Django-1.10.2-py2.py3-none-any.whl 文件。.whl文件的安装,同样需要使用 pip 命令...pypackage>pip install Django-1.9.7-py2.py3-none-any.whl

    有些时候由于网络的原因,我们可以指定-i参数进行下载

    清华:https://pypi.tuna.tsinghua.edu.cn/simple

    阿里云:http://mirrors.aliyun.com/pypi/simple/

    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

    华中理工大学:http://pypi.hustunique.com/

    山东理工大学:http://pypi.sdutlinux.org/ 

    豆瓣:https://pypi.douban.com/simple/

    可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple

    例如:pip install -i https://pypi.douban.com/simple/ requests,这样就会从豆瓣这边的镜像去安装requests库。

    linux虚拟环境virtualenv(不推荐)

    在我们进行项目开发的时候,往往不同的项目使用的不同版本的库,比如有些项目使用django1.x开发,有些项目使用django2.x开发。这时候最好的方式就是安装虚拟环境了,在不同的项目下使用不同的虚拟环境

    virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。以宿主机的python解释器为主体,然后复制的多个虚拟环境。

    1.通过豆瓣云下载

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

    2.通过virtualenv命令,创建第一个新的虚拟环境

    把虚拟环境全部装在/opt/my-venv下,先创建my-venv,在进入到里面执行如下命令

    [root@HH my-venv]# virtualenv --no-site-packages --python=python3     venv1

    参数解释
    --no-site-packages 创建一个干净,隔离宿主机环境的虚拟环境

    --python=python3 #指定你的虚拟环境,以哪个解释器为base环境,我的这个是以我机器上的python3解释器为主体

    创建完成之后在venv1的bin下会有一个activate文件

    [root@HH venv1]# cd bin/
    [root@HH bin]# ls
    activate      activate.fish  activate_this.py  easy_install      pip   pip3.6  python3    python-config
    activate.csh  activate.ps1   activate.xsh      easy_install-3.6  pip3  python  python3.6  wheel

    3.激活虚拟环境,切换宿主机环境,进入虚拟环境的环境变量

    source /opt/my-venv/venv1//bin/activate

    4.检查环境变量PATH,检查是否正确激活了虚拟环境

    [root@HH bin]# source /opt/my-venv/venv1//bin/activate
    (venv1) [root@HH bin]# echo $PATH
    /opt/my-venv/venv1/bin:/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

    可以看到我们的python解释器默认使用我们虚拟环境的解释器

    5.检查你当前的python3和pip3来自于哪里

    (venv1) [root@HH bin]# which python3
    /opt/my-venv/venv1/bin/python3
    (venv1) [root@HH bin]# which pip3
    /opt/my-venv/venv1/bin/pip3

    可以看到python3和pip3都来自虚拟环境

    6.使用venv1虚拟环境,安装一个django1.11.11

    (venv1) [root@HH bin]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.11

    安装完查看

    (venv1) [root@HH bin]# pip3 list
    Package    Version
    ---------- -------
    Django     1.11.11
    pip        19.2.3 
    pytz       2019.2 
    setuptools 41.2.0 
    wheel      0.33.6 

    8.退出虚拟环境

    (venv1) [root@HH bin]# deactivate 
    [root@HH bin]#

    requirements.txt

    假设我们在本地开发环境,准备好了项目+依赖包环境,现在需要将项目上传至服务器,上线发布,那么就要保证服务器的python环境一致性。

    我们可以通过freeze导出当前python环境的包

    安装freeze

    pip install freeze

    导出当前环境的包

    pip3 freeze > requirements.txt

    这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。如下所示

    上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖

    pip3 install -r requirements.txt

    linux虚拟环境virtualenvwrapper(推荐)

    virtualenv 的一个最大的缺点就是:每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。并且还有可能你忘记了虚拟环境放在哪。。。

    一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/my-venv/,并且针对不同的目录做不同的事。

    使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。

    1.下载安装

    pip3 install virtualenvwrapper

    执行脚本,让当前机器支持virtualenvwrapper,但是有一个问题,重启后,退出会话后,这个功能就失效了

    2.配置全局变量,让每次登陆linux时候,就加载这个virtualenvwrapper.sh脚本文件,使得virtualenvwrapper这个工具生效

    打开这个用户环境变量配置文件,写入以下信息,export 就是读取一段shell变量的命令

    vim   ~/.bashrc      #这个文件代表用户环境变量,每次登陆时候加载

    export WORKON_HOME=~/Envs   # 设置virtualenv的统一管理目录
    export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   # 添加virtualenvwrapper的参数,生成干净隔绝的环境
    export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3.6     # 指定python解释器,(这个得根据你自己机器环境来配)
    source  /opt/python36/bin/virtualenvwrapper.sh      # 执行virtualenvwrapper安装脚本,这个脚本放在你的python3.6解释器bin目录下(自己的目录)
    [root@HH bin]# pwd
    /opt/python36/bin
    [root@HH bin]# ls
    2to3              idle3.6  pip3.6    python3.6          python3-config  virtualenv-clone
    2to3-3.6          pbr      pydoc3    python3.6-config   pyvenv          virtualenvwrapper_lazy.sh
    easy_install-3.6  pip      pydoc3.6  python3.6m         pyvenv-3.6      virtualenvwrapper.sh
    idle3             pip3     python3   python3.6m-config  virtualenv

    可以看到bin下还有个 virtualenvwrapper.sh

     读取文件,使得生效,此时已经可以使用virtalenvwrapper

    source ~/.bashrc

    至此我们就可以使用virtualenvwrapper了

    virtualenvwrapper常用命令

    virtualenvwrapper具有tab补全的功能,并且可以在任意目录下执行

    1.mkvirtualenv创建一个虚拟环境venv

    mkvirtualenv venv1

    这一步会创建venv1,并且放入到WORKON_HOME变量定义目录下,并且自动激活虚拟环境

    2.deactivate退出虚拟环境

    deactivate

    3.lsvirtualenv查看当前机器所有的虚拟环境

    lsvirtualenv 

    4.workon激活虚拟环境,也用于在多个虚拟环境中来回切换

    [root@HH bin]# workon venv2
    (venv2) [root@HH bin]# workon venv1
    (venv1) [root@HH bin]# 

    可以看到直接从一个虚拟环境切换到另一个虚拟环境

    5.rmvirtualenv删除虚拟环境,也会自动找到所有的虚拟环境

    [root@HH bin]# rmvirtualenv venv1
    Removing venv1...
    [root@HH bin]# lsvirtualenv 
    venv2
    =====

    6.cdvirtualenv直接进入虚拟环境的目录,此命令需要激活虚拟环境

    [root@HH bin]# workon venv2
    (venv2) [root@HH bin]# cdvirtualenv 
    (venv2) [root@HH venv2]# pwd
    /root/Envs/venv2

    7.cdsitepackages 直接进入pip3软件包的目录

    (venv2) [root@HH venv2]# cdsitepackages
    (venv2) [root@HH site-packages]# pwd
    /root/Envs/venv2/lib/python3.6/site-packages
  • 相关阅读:
    最大的错误就是没有把自己的软件开发事业当 作一桩生意来看待
    python:open/文件操作
    Python 之ConfigParser
    Python 之ConfigParser
    Python 之ConfigParser
    python的time模块使用
    python的time模块使用
    python的time模块使用
    国外、国内各大OJ
    国外、国内各大OJ
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11623427.html
Copyright © 2020-2023  润新知