在使用 python 制做网页的过程当中,咱们每每须要先将站点的目录“虚拟化”。虚拟化其实就是将当前文件下程序的运行环境与整个系统的环境隔离。那么为何咱们要将一个项目虚拟化呢?html
在平时使用 python 时,有可能会遇到这几个常见的问题:python
1.当运行的项目处于不一样版本时(如 python 2.7/3.7 ),要经过切换 python 解释器的版原本运行程序(或要使用 python2/3
pip/pip3
等指令来对应不一样的版本)。bash
2.有时作一个项目要用到许多第三方模块,可是其余项目基本不会用。若是直接 pip install
到系统中,项目删除后清除安装过的模块会很麻烦。编辑器
3.作完一个项目后,你但愿可以再也不一次安装它依赖的模块,就能在另一个系统上直接运行。code
4.你的项目暂时运行在一个旧版的第三方模块上,而新版的第三方模块不兼容你所写的程序。你既但愿可以让原来的项目在旧版本上继续正常运行,又但愿可以在另外一个项目中使用新版本。htm
若是你遇到过上面这四个问题,而且但愿可以改善这一些繁琐的配置过程,那么你就能够尝试对你的项目进行“虚拟化”。ip
python 自带了一个很是简便的虚拟化模块 - venv 。在 python 3.5 及以前的版本,建立一个虚拟化项目的指令为:文档
$ python -m venv <directory>
而在 3.6 以后的版本中,指令变成了get
$ python3 -m venv <directory>
其中在 3.4 及以前的版本中,初始化一个环境是不会自带 pip 的。而在 3.4 以后,能够添加 --without-pip
这个参数来去掉 pip 包。cmd
固然,venv还有 --copies
参数,它就能够在建立时把系统已有的模块复制进去。不过通常这个不经常使用。(由于系统里装的模块可能已经不少了)若是真的要使用系统中的模块,请参考第四小节的设置。
成功建立了虚拟化的环境以后,咱们须要先进入这个环境(否则 pip 仍是会装在系统中)。咱们可使用如下指令来进入环境。其中 <venv>
是你项目文件夹的路径。
MacOS 或 Linux
bash/zsh $ source <venv>/bin/activate
fish $ . <venv>/bin/activate.fish
csh/tcsh $ source <venv>/bin/activate.csh
Windows
cmd.exe C:\> <venv>\Scripts\activate.bat
PowerShell PS C:\> <venv>\Scripts\Activate.ps1
cometeme$ source /Users/cometeme/Documents/example/bin/activate (example)cometeme$
能够看到前面多了一个(example)的提示,说明咱们已经进入到虚拟环境中了。在虚拟环境里,咱们能够像正常同样操做里面的文件,或是安装第三方模块,只不过这一些都只会影响到本地的内容了。
当咱们想要退出虚拟环境时,咱们能够输入 deactivate
这个指令来退出。
在虚拟环境的根目录下,咱们能够看到一个叫 pyvenv.cfg
的文件。用文本编辑器打开后能够看到这几行内容:
home = /Library/Frameworks/Python.framework/Versions/3.7/bin include-system-site-packages = false version = 3.7.0
其中, home
指的是系统中 python 模块的安装位置。除非你自定义过了,否则这个默认值就是对的。
include-system-site-packages
这个参数能够设置是否开启“引用系统中的模块”的功能。若是开启了,那么当你就能够直接使用系统中已经装过的第三方模块。(可是你在虚拟环境下装的模块就不能被其余地方的程序使用)
version
能够指定 python 的版本,前提是你必需要安装这个版本。(好比你只装了 python3.6 ,那么你设置成 2.7 就会出错)
大约一千多字, venv 的这个模块的一些简单使用方法就已经介绍完了,简洁却又方便,这一直是 python 的特性。其实除了能够在控制台中使用外,它还能够做为一个模块在程序中使用。不过通常状况下咱们只须要用控制台就能够了。若是你们还想深刻研究,能够查看 29.3. venv — Creation of virtual environments 。