为什么需要虚拟环境?
和大多数编程语言一样, python 有自己独特的下载, 存储和解析包的方式. python 存储和解析包的方式, 有其自身的优势, 但也导致了一些问题.
这些包有可能被安装在不同的路径下, 例如:
大多数与系统相关的包存储在 sys.prefix 路径的子目录中. 在 Mac OS X 上, 您可以使用 Python shell 轻松找到 sys.prefix 指向的位置:
- >>> import sys
- >>> sys.prefix
- '/Users/sunguangya/anaconda3'
使用 easy_install 或 pip 安装的第三方软件包通常放在 site.getsitepackages 指向的其中一个目录中, 仍然可以使用 python shell 轻松找到:
- >>> import site
- >>> site.getsitepackages()
- ['/Users/sunguangya/anaconda3/lib/python3.6/site-packages']
默认情况下, 系统上的每个项目都将使用这些相同的目录来存储和检索站点包 (第三方库).
假如有两个项目: 项目 A 和项目 B, 项目 A 需要第三方库 C 的 1.0 版本, 项目 B 需要第三方库 C 的 2.0 版本. 但是, 对于 python, 在一个 sitepackages 目录下不可能有两个版本的第三方库. 这是因为第三方库是依据名字进行保存的, 不同版本的名字没有区别. 这样, 当一个任务需要同时运行项目 A 和项目 B 时, 就无法正常运行.
这就需要虚拟环境工具 venv
什么是虚拟环境?
Python 虚拟环境的主要目的是为 Python 项目创建一个独立的环境. 即每个项目都可以拥有自己的系统库和第三方库, 而不管每个其他项目依赖哪些库.
在上面的例子中, 我们只需要为项目 A 和项目 B 创建一个单独的虚拟环境. 每个环境都能够依赖于他们自己选择的第三方库 C 的版本, 而不依赖于其他版本.
- $ mkdir python_venv
- $ cd python_venv
- $ source env/bin/activate
- (env) $
- (env) $ deactivate
- $
来源: http://www.jianshu.com/p/aac96453731d