Python安装虚拟环境

Python 安装虚拟环境

在安装虚拟环境之前,我们要了解虚拟环境是干啥的,为什么要有虚拟机环境的存在,其实,这个涉及到一个名字叫包污染的概念,我们都知道,在写项目的时候,可能有很多第三方依赖包,可能当时包的版本还是比较老的,当项目重构的时候,我们可能需要这些包,那么等到项目重构我们再去安装可能已经更新了,虽然能指定安装,但是还是不太友好,所以一般来说,我们在项目创建的时候就会创建一个虚拟环境,用来安装项目中的所有第三方库…

Python 安装虚拟环境有三种,

  • virtualenv
  • virtualenvwrapper
  • pipenv

使用virtualenv(虚拟化)进行项目管理

virtualenv:可以创建一个单独的虚拟环境,安装私有包,而不会污染全局环境,它让你的电脑从项目目录而不是系统全局的python主目录下查找和安装包。
使用virtualenv步骤如下(已经在Linux(ubuntu)上操作过,window还未实践):

1.虚拟环境使用第三方实用工具virtualenv创建,可以输入以下命令可以检查系统是否安装了virtualenv:

1
virtualenv  --version

如果结果显示错误,那么你就需要安装这个工具

注意python3.3通过 venv 模块原生支持虚拟环境,命令为pyvenvpyvenv可以替代virtualenv。不过要注意,在python3.3中使用pyvenv命令创建的虚拟环境不包括pip,你需要手动安装。python3.4改进了这一缺陷,pyvenv完全可以替代virtualenv

  1. 大多数的Linux发行版都提供了virtualenv,例如linux用户可以使用下述命令安装

    1
    sudo apt-get install python-virtualenv 或 pip install virtualenv

    如果你的电脑是Mac OS X 系统,就可以使用easy_install 安装 virtualenv

    1
    sudo easy_install virtualenv

    如果你的Window系统或没有其它官方virtualenv的包的操作系统,那么安装过程要稍微复杂点,在浏览器中输入http://bitbucket.org/pypa/setuptools/ 回车后会进入setuptools安装程序的主页。在这个页面中华找到下载安装脚本的链接,脚本名为ez_setup.py。把这个保存到电脑的一个临时文件夹中,然后在这个文件夹中执行以下我命令:

    1
    2
    python ez_setup.py install
    easy_install virtualenv

注意:上述命令必须具有管理员权限的用户身份执行,在window系统中,请使用 以管理员身份运行选项打开命令行窗口,在基于Unix中,要在上面两个命令前加上 sudo,或者以根用户身份执行,一旦安装完毕virtualenv实用工具就可以从常规账号中调用

哈哈,说了这么多,还是一直在安讲安装,接下来我们就开始讲如何操作

  1. 首先要使用virtualenv来初始化项目
    1
    virtualenv env

后面的这个env 告诉 virtualenv,把所有的包都装在一个叫作env的文件夹里,这个文件夹保存的是一个全新的虚拟环境,

  1. 激活virtualenv 使用前需要激活这个环境,如果你是 bash命令行(Linux和Mac OS X用户),可以通过以下的命令来激活这个虚拟环境:
    1
    source env\bin\activate

如果你是window用户,激活命令为;

1
env/bin/activate

当虚拟环境被激活后,python解释器的路径就被添加到了PATH中,但是这种环境不是永久的,它只会影响当前的命令行会话。为了提醒你已经激活了虚拟环境,激活虚拟环境的命令会修改命令行的提示符,加入环境名: (evn) $
然后我们就可以在这个虚拟环境中愉快的装包了,不用担心会影响全局变量

  1. 退出 virtualenv
    • 退出你只需要一个命令就能完成了,那就是deactivate

使用 pipenv 安装虚拟环境(Linux环境)

Pipenv 是 Python 项目的依赖管理器,类似 NodeJS的 npm 或 Ruby 的 bundler,那么为什么我们要使用pipenv呢,就是因为lockfile,所以我们要使用pipenv来进行项目的虚拟环境

1
pip3 install --user pipenv

注意 这样安装完之后,就去立马使用 pipenv 是会报错的,找不到这个命令,那么应该怎么做呢,

1
2
PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
PATH="$PATH:$PYTHON_BIN_PATH"

把上述配置写入 /etc/profile 文件 ,然后 source /etc/profile 激活一下 就可以永久使用了,不然只能在当前环境使用

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
47
48
49
50
51
52
$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
--update Update Pipenv & pip to latest. # 更新pipenv和pip到最新版本
--where Output project home information. # 获取项目路径
--venv Output virtualenv information. # 获取虚拟环境的路径
--py Output Python interpreter information. # 获取python解释器的路径
--envs Output Environment Variable options. # 输出当前的环境变量
--rm Remove the virtualenv. # 删除虚拟环境
--bare Minimal output.
--completion Output completion (to be eval'd).
--man Display manpage.
--three / --two Use Python 3/2 when creating virtualenv. # 使用python3/2创建虚拟环境
--python TEXT Specify which version of Python virtualenv should use. # 指定python的版本信息
--site-packages Enable site-packages for the virtualenv.
--jumbotron An easter egg, effectively.
--version Show the version and exit.
-h, --help Show this message and exit.

Usage Examples:
Create a new project using Python 3.6, specifically:
$ pipenv --python 3.6

Install all dependencies for a project (including dev):
$ pipenv install --dev

Create a lockfile containing pre-releases:
$ pipenv lock --pre

Show a graph of your installed dependencies:
$ pipenv graph

Check your installed dependencies for security vulnerabilities:
$ pipenv check

Install a local setup.py into your virtual environment/Pipfile:
$ pipenv install -e .

Commands:
check Checks for security vulnerabilities and against PEP 508 markers
provided in Pipfile.
graph Displays currently–installed dependency graph information.
install Installs provided packages and adds them to Pipfile, or (if none
is given), installs all packages.
lock Generates Pipfile.lock.
open View a given module in your editor.
run Spawns a command installed into the virtualenv.
shell Spawns a shell within the virtualenv.
uninstall Un-installs a provided package and removes it from Pipfile.
update Uninstalls all packages, and re-installs package(s) in [packages]
to latest compatible versions.

pipenv 创建虚拟环境

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
# 查看当前虚拟环境
pipenv --venv
# 生成3 或者2 的虚拟机环境
pipenv --three
pipenv --two

# 安装包
pipenv install packageName

#激活虚拟环境
pipenv shell

# 退出虚拟环境
exit

# 图形查看依赖关系
pipenv graph

# 安装开发依赖包
pipenv install packageName --dev

# 生成 lockfile 也就是 Pipfile.lock
pipenv lock

# 卸载安装包
pipenv uninstall packageName

# 删除所有的安装包
pipenv uninstall --all

# 生成requirements.txt文件
$ pipenv lock -r

# 生成dev-packages的requirements.txt文件
pipenv lock -r -d

请参考 https://docs.pipenv.org/#cmdoption-pipenv-venv

补充

出处 董伟明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# demo.py
import sys
import json

package = sys.argv[1]
other_dependencies = set()
removing_dependencies = set([package])

for i in json.load(sys.stdin):
for p in i['dependencies']:
key = p['key']
if i['package']['key'] == package:
removing_dependencies.add(key)
else:
other_dependencies.add(key)

print(' '.join(removing_dependencies - other_dependencies))

1
pipenv uninstall `pipenv graph --json |python3 demo.py packageName`
---------------- The   End ----------------