virtualenv如何工作?
我检查了激活脚本,它看起来对我来说只是:
- 设置VIRTUAL_ENV env
- 在PATH前附加$ VIRTUAL_ENV / bin
virtualenv
如何通过这些提供神奇的虚拟环境? 我错过了什么?
我将描述我从jcollado链接到的演示中学到的基本过程。
当Python启动时,它会查看二进制文件的path及其前缀。 所以我们说你的virtualenv是/home/blah/scratch
。 然后python二进制文件(只是你的系统python二进制文件的副本)将在/home/blah/scratch/bin/python
。 Python在/home/blah/scratch/bin/
查找lib/pythonX.X/os.py
,然后在/home/blah/scratch/
/home/blah/scratch/lib/pythonX.X/os.py
,因为/home/blah/scratch/lib/pythonX.X/os.py
存在。 如果没有,Python会继续寻找/home/blah/lib/pythonX.X/os.py
,等等。然后在这个基础上设置sys.prefix
。 它使用一个类似的过程来设置sys.exec_prefix
,然后在这些基础上构buildsys.path
。
这是一个关于这个主题的非常好的介绍 。 基本上,它解释了用Ian Bicking用来编写自己的virtualenv
的步骤。
- 首先,用户使用
virtualenv myenv
命令创build一个新的virtualenv。 这将创build一个名为myenv的目录,并将系统python二进制文件复制到myenv / bin 。 它还向myenv添加了其他必要的文件和目录,包括bin / activate中的安装脚本和模块和软件包的lib子目录。 - 然后用户使用激活脚本
. myenv/bin/activate
. myenv/bin/activate
,它将shell的PATH
环境variables设置为以myenv / bin开头。 - 现在,当用户从这个shell运行
python
,它将执行存储在myenv / bin中的二进制文件的副本。 即使二进制文件与/ usr / bin / python中的二进制文件相同,标准的python二进制文件也可以search与二进制文件path相关的目录中的软件包和模块(这个function与virtualenv无关)。 它看起来在../lib/pythonX.Y其中X和Y是python二进制文件的主版本号和次版本号。 所以现在看在myenv / lib / pythonX.Y 。 - myenv / bin目录还包含一个名为
pip
的脚本,以便当用户使用virtualenv中的pip安装新软件包时,它们将安装在myenv / lib / pythonX.Y
本文迎合python和Django随着Linux。 http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/