Python虚拟环境的创建与管理

1-基本概念

虚拟环境是独立于 Python 全局环境的 Python 解释器环境,使用它的好处如下:

  • 保持全局环境的干净
  • 指定不同的依赖版本
  • 方便记录和管理依赖

如果同时开发多个Python程序,但应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办呢?
这时就需要让它们各自拥有一套“独立“的Python运行环境。

2-venv与virtualenv

1)安装虚拟环境创建模块

  • Python 3可使用 内置的 venv 模块创建虚拟环境。
    或者pip3 install virtualenv

  • Python 2则需要安装 virtualenv 作为替代:

     pip install virtualenv
     或 sudo pip install virtualenv
    

2)创建新的虚拟环境

  • venv: python -m venv c:\path\to\env
  • virtualenv: virtualenv env

上述命令的最后一个参数是虚拟环境名称,可以自由定义。

如果不想使用系统的包,加上–no-site-packeages参数

上述创建命令会在当前目录创建一个包含 Python 解释器环境的虚拟环境文件夹,名称为env。

3) 执行/退出虚拟环境

创建虚拟环境后,我们可以使用下面的命令来激活虚拟环境,如下所示(执行
deactivate 可以退出虚拟环境):

     $ env\Scripts\activate # Windows
     $ . env/bin/activate # Linux 或 macOS

这时命令提示符前会显示虚拟环境的名称,表示已经激活成功:

     (env) $

4)开发新项目时如何操作

  • 第一步:为项目创建目录 mkdir 文件夹名称
  • 第二步:创建一个独立的Python运行环境,命名为venv python -m venv venv
  • 第三步:激活使用 env\Scripts\activate 退出使用 deactivate
  • 如需删除使用的虚拟环境可直接删除该venv文件夹

5) venv的详细使用参数

     usage: venv [-h] [--system-site-packages] [--symlinks] [--clear]
                 [--upgrade] [--without-pip] ENV_DIR [ENV_DIR ...]

     Creates virtual Python environments in one or more target directories.

     positional arguments:
       ENV_DIR             A directory to create the environment in.

     optional arguments:
       -h, --help             show this help message and exit
       --system-site-packages Give access to the global site-packages dir to the
                              virtual environment.
       --symlinks             Try to use symlinks rather than copies, when symlinks
                                    are not the default for the platform.
       --copies               Try to use copies rather than symlinks, even when
                                   symlinks are the default for the platform.
       --clear                Delete the environment directory if it already exists.
                                  If not specified and the directory exists, an error is
                                 raised.
       --upgrade              Upgrade the environment directory to use this version
                                     of Python, assuming Python has been upgraded in-place.
       --without-pip          Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default)

使用时python -m venv [-参数]

6)其它有用指令

     pip freeze #查看当前安装库版本
     #创建 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表
     #保持部署相同,一键安装所有包
     pip install -r requirements.txt
     pip freeze > requirements.txt 
     lsvirtualenv    #列举所有的环境
     cdvirtualenv    #导航到当前激活的虚拟环境的目录中,相当于pushd 目录
     cdsitepackages   # 和上面的类似,直接进入到 site-packages 目录
     lssitepackages     #显示 site-packages 目录中的内容

3-pyenv

在Python世界里,除了需要对Python的版本进行管理以外,还需要对不同的软件包进行管理。管理不同Python版本可使用pyenv。

1)pyenv是什么

pyenv是一个Python版本管理 工具,它能够进行全局的Python版本切换,也可以为单个项目提供对应的Python版本。使用pyenv以后,可以在服务器上安装多个不同的Python版本,也可以安装不同的Python实现。不同Python版本之间的切换也非常简单。

比如,, 在terminal中输入一个命令比如‘ls’时, shell会从当前环境的PATH中的各个目录里看是不是有ls这个可执行文件, 如果找到就执行, 否则就会报‘command no found’ 的错误, 同理, 只要控制PATH变量就能够做到python版本的切换, pyenv通过在PATH头部插入shims路径来实现对python版本的控制.

特点

  • pyenv侧重于python 解释器版本管理, 比包管理更大一个层级, 使用pyenv可以方便的下载指定版本的python解释器, pypy, anaconda等, 可以随时自由的在shell环境中本地、全局切换python解释器
  • 开发的时候不需要限定某个版本的虚拟环境, 只需要在部署的时候用pyenv指定某个版本就好了
  • pyenv切换解释器版本的时候, pip和ipython以及对应的包环境都是一起切换的, 所以如果你要同时运行ipython2.x和ipython3.x多个解释器验证一些代码时就很方便
  • pyenv也可以创建好指定的虚拟环境, 但不需要指定具体目录, 自由度更高, 使用也简单

2)简单使用

     # 查看当前版本
     pyenv version

     # 查看所有版本
     pyenv versions

     # 查看所有可安装的版本
     pyenv install --list

     # 安装指定版本
     pyenv install 3.6.5
     # 安装新版本后rehash一下
     pyenv rehash

     # 删除指定版本
     pyenv uninstall 3.5.2

     # 指定全局版本
     pyenv global 3.6.5

     # 指定多个全局版本, 3版本优先
     pyenv global 3.6.5 2.7.14

     # 实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的

3)pyenv-win

pyenv自身不支持windows系统,但有大神在他其础上开发了相关工具pyenv-win,可满足基础功能使用。

安装

安装命令
pip install pyenv-win --target %USERPROFILE%/.pyenv %USERPROFILE%换成你要存放pyenv的路径。

配置环境变量:

  • 在系统变量中添加变量PYENV 值为%USERPROFILE%\.pyenv\pyenv-win 记得更改路径
  • 在变量PATH中添加pyenv命令(中间用分号隔开):%PYENV%\bin%PYENV%\shims
  • 2019年5月更新的windows用户要将%USERPROFILE%\AppData\Local\Microsoft\WindowsApps放在上面

验证安装是否成功
打开新的终端输入pyenv --version
在home路径运行pyenv rehash

使用

  • 安装一个版本的python: pyenv install 3.6.8

  • 如果操作超时可更换其默认的下载镜像源,比如淘宝镜像源:https://npm.taobao.org/mirrors/python/,替换掉 \pyenv-win\libexec\pyenv-install.vbs中的网址

      If mirror = mirrorEnvPath then
          mirror = "https://www.python.org/ftp/python"
    
  • 再次尝试下载,查看网速是否正常

  • 其他使用见pyenv

4-更换虚拟环境的Python版本

这里要用到pyenv和venv,且默认已经创建了一个虚拟环境

  • 1)在虚拟环境中使用pip freeze > requirements.txt,将所有依赖包及其版本号保存为需求文件
  • 2)deactivate退出虚拟环境,使用rm -rf (虚拟环境文件名)删除之前的虚拟环境
  • 3)使用pyenv设定当前文件夹的Python版本,pyenv local (设定版本号)
  • 4)使用venv重新创建虚拟环境,python -m venv (虚拟环境文件名)
    1. 激活虚拟环境 虚拟环境文件名\scripts\activate,将需求文件导入pip install -r requirements.txt
  • 6)查看是否导入成功pip list
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343