Python工具 pip、pyenv、virtualenv、virtualenvwrapper等介绍

pip

pip是一个Python语言开发的命令行程序,用来安装、管理Python Package

常用命令有:

  1. 显示已安装Package列表 pip list
  2. 安装最新版本Package pip install package_name
  3. 安装指定版本Package pip install package_name==3.2.0
  4. 安装不低于某个版本的Package pip install 'package_name>=3.0.0'
  5. 批量安装Package pip install -r requirements.txt
  6. 卸载Package pip uninstall package_name

更多用法请参考Python pip介绍

PyPI

PyPI全称为Python Package Index,是Python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPIPyPI推荐使用pip包管理器来下载第三方库。

pyenv

pyenv 介绍

pyenv是一款UNIX下的Python版本管理工具,不支持Windows。

pyenv可以改变全局的 Python 版本,安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理Python虚拟环境。所有的设置都是用户级别的操作,不需要sudo权限。

pyenv是通过修改系统环境变量PATH来实现的。系统环境变量PATH,大家都不陌生,里面包含了一串由冒号分隔的路径,例如/usr/local/bin:/usr/bin:/bin。每当在系统中执行一个命令时,例如pythonpip,操作系统就会在PATH的所有路径中从左至右依次寻找对应的命令。因为是依次寻找,因此排在左边的路径具有更高的优先级。而pyenv做的,就是在PATH最前面插入一个$(pyenv root)/shims目录。这样,pyenv就可以通过控制shims目录中的Python版本号,来灵活地切换至我们所需的Python版本。

pyenv 安装

脚本自动安装(推荐)

最简单的方式就是通过pyenv-install脚本自动安装,默认安装在用户目录~/.pyenv

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

如果你用的zsh,则将末尾的bash替换成zsh即可。

通过此方式,除了安装pyenv以外,还包含如下插件:

  • pyenv-doctor
  • pyenv-installer
  • pyenv-update
  • pyenv-virtualenv
  • pyenv-which-ext

通过pyenv update命令可升级以上全部插件。

如果不确定pyenv的环境是否安装正常,可以通过pyenv doctor命令对环境进行检测。

如果你要卸载pyenv,执行rm -rf $(pyenv root),然后删除~/.bashrc文件中的下列内容即可。

1
2
3
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
通过Git手动安装

首先,clone项目到你想安装的路径

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

定义环境变量,添加pyenv init到shell

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

重启shell,使修改后的Path生效

$ exec "$SHELL"

升级pyenv

cd $(pyenv root) && git pull

pyenv 用法

查看已安装 Python 版本

$ pyenv versions

查看可安装 Python 版本

$ pyenv install -l/--list

安装指定版本Python

$ pyenv install 3.5.2

卸载指定版本Python

$ pyenv uninstall 3.5.2

查看当前激活的Python版本及相关信息

$ pyenv version

列出包含给定命令的所有Python版本

$ pyenv whence [command]

如查看哪些版本安装了supervisor

$ pyenv whence supervisorctl

查看当前激活Python版本指定命令全路径

$ pyenv which supervisorctl

重建shims

$ pyenv rehash

每次安装|卸载Python版本或带有可执行文件的Package(如 pip、supervisor等)以后,都应该执行一次本命令

切换Python版本

$ pyenv global|local|shell [python_version]

pyenv可以从三个维度来管理Python环境,对应命令分别是: global(当前系统)、local(当前目录)、shell(当前shell)。这三个维度的优先级从左到右依次升高,即global的优先级最低、shell的优先级最高。对应pyenv的版本信息分别记录在$(pyenv root)/version当前目录.python-version、当前shell session的环境变量PYENV_VERSION

$ pyenv local|shell --unset可分别取消localshell级别的Python环境设置。

virtualenv

virtualenv 介绍

virtualenv是一款支持Python”虚拟”运行环境的工具,可以方便的管理Python Package版本,支持Windows。

virtualenv is a tool to create isolated Python environments.

virtualenv通过创建独立Python开发环境,来解决依赖、版本以及间接权限问题。比如一个项目依赖Celery 3.2.5,而当前全局开发环境为Celery 4.2.0,版本跨度过大, 导致不兼容使项目无法正在运行, 使用virtualenv可以解决这些问题。

virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理Python版本和管理Python库。

virtualenv 安装

pip命令安装

$ [sudo] pip install virtualenv
或者
$ [sudo] pip install https://github.com/pypa/virtualenv/tarball/master

源码安装
1
2
3
4
$ curl -O https://github.com/pypa/virtualenv/archive/16.0.0.tar.gz
$ tar xvfz virtualenv-16.0.0.tar.gz
$ cd virtualenv-16.0.0
$ [sudo] python setup.py install

virtualenv 用法

Linux
  • 创建虚拟环境

    $ virtualenv [-p|--python /usr/bin/python3.5] env_test

  • 激活虚拟环境

    $ source env_test/bin/activate

  • 取消激活

    $ deactivate

  • 删除虚拟环境

    $ rm -rf env_test

Windows
  • 创建虚拟环境

    > virtualenv [-p|--python "c:\Python27\python.exe"] env_test

  • 激活虚拟环境

    > env_test\Scripts\activate

  • 取消激活

    > env_test\Scripts\deactivate.bat

  • 删除虚拟环境

    > rd /s /q env_test

pyenv-virtualenv

pyenv已内置了pyenv-virtualenv插件,无需另外安装。

  • 创建项目环境

    $ pyenv virtualenv 3.5.2 env_test

  • 项目环境设置

    $ pyenv local env_test

    设置后,只要cd进这个目录,就会启用对应环境。

命令参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name>
pyenv virtualenv --version
pyenv virtualenv --help

-f/--force Install even if the version appears to be installed already

Usage: virtualenv [OPTIONS] DEST_DIR

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose Increase verbosity.
-q, --quiet Decrease verbosity.
-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python2.5 will use the python2.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with
(/usr/bin/python3)
--clear Clear out the non-root install and start from scratch.
--no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior.
--system-site-packages
Give the virtual environment access to the global
site-packages.
--always-copy Always copy files rather than symlinking.
--unzip-setuptools Unzip Setuptools when installing it.
--relocatable Make an EXISTING virtualenv environment relocatable.
This fixes up scripts and makes all .pth files
relative.
--no-setuptools Do not install setuptools in the new virtualenv.
--no-pip Do not install pip in the new virtualenv.
--no-wheel Do not install wheel in the new virtualenv.
--extra-search-dir=DIR
Directory to look for setuptools/pip distributions in.
This option can be used multiple times.
--download Download preinstalled packages from PyPI.
--no-download, --never-download
Do not download preinstalled packages from PyPI.
--prompt=PROMPT Provides an alternative prompt prefix for this
environment.
--setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--distribute DEPRECATED. Retained only for backward compatibility.
This option has no effect.

virtualenvwrapper

virtualenvwrapper 介绍

virtualenvwrappervirtualenv的扩展工具包,它将所有虚拟环境整合在一个目录下,并且对virtualenv命令进行了封装,可以很方便的创建、删除、复制虚拟环境。

virtualenvwrapper不支持Windows,可用virtualenvwrapper-win替代,下文有介绍。

virtualenvwrapper 安装

virtualenvwrapper依赖virtualenv,所以需要先安装virtualenv

$ pip install --user virtualenvwrapper

$ sudo pip install virtualenvwrapper

--user安装在用户目录,默认为$HOME/.local/sudo安装在/usr/local/目录

配置工作目录和项目目录,在 ~/.zshrc 中加入如下内容:

1
2
3
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/PyEnvs
source $HOME/.local/bin/virtualenvwrapper.sh

然后执行source ~/.zshrc,即可生效。

如果使用的是 bash,则将~/.zshrc替换成 ~/.bashrc

virtualenvwrapper 用法

创建新的虚拟环境

$ mkvirtualenv [envname]

该命令会帮我们创建一个新环境,默认情况下,环境的目录是 ~/.virtualenv/enname,创建过程中它会自动帮我们安装 pip 等必要的软件,以后我们要安装新依赖时可直接使用 pip 命令。创建完之后,自动切换到该环境下工作,可看到提示符前边多了像(envname)$这样的字符。在这个环境下安装的依赖不会影响到其他的环境。

该命令有几个可选参数:

1
2
3
4
5
6
7
-a project_path
与一个工程目录建立关联
-i package
创建环境时安装相应的包.
如 -i Flask、-i Flask==0.11.1 或者安装多个包 -i Flask -i locustio
-r requirements_file
同 pip install -r requirements_file 用法

该命令还支持加入 virtualenv 的参数选项,例如指定环境的 python 版本为 3.5:

$ mkvirtualenv env_test --python=python3.5

如果出现No module named virtualenvwrapper,可将下列内容添加到~/.zshrc,重新执行source ~/.zshrc

1
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
创建新项目

$ mkdir $PROJECT_HOME

$ mkproject proname

该命令要求配置PROJECT_HOME目录,它在WORKON_HOME 目录下创建一个名为 proname 的虚拟环境,同时在 PROJECT_HOME 目录下创建名为 proname 的项目目录。创建完成后会自动激活虚拟环境,并进入 proname 目录。

创建临时运行环境

$ mktmpenv

切换虚拟环境

$ workon envname

退出虚拟环境

$ deactivate

列出所有环境

$ workon$ lsvirtualenv

删除环境

$ rmvirtualenv [envname]

显示环境详情

$ showvirtualenv [envname]

复制环境

$ cpvirtualenv [source] [dest]

列出当前工作环境中安装的包

$ lssitepackages

更多命令请参考Command Reference

virtualenvwrapper-win

virtualenvwrapper-win 介绍

virtualenvwrapper-winvirtualenvwrapper的Windows版本,功能和用法都类似。

virtualenvwrapper-win 安装

$ pip install virtualenvwrapper-win

virtualenvwrapper-win 用法

创建新的虚拟环境

> mkvirtualenv -p "c:\Python2712\python.exe" env-test

设置项目目录

> setprojectdir d:\project-test

查看已安装虚拟环境

> lsvirtualenv

删除虚拟环境

> rmvirtualenv env-test

切换虚拟环境

> workon env-test

退出虚拟环境

> deactivate

更多命令请参考Main Commands

参考资料:
pyenv 命令参考文档
virtualenv 官方文档
virtualenvwrapper 官方文档
virtualenvwrapper-win
Python安装与版本管理
使用pyenv管理多个Python版本依赖环境