python - virtualenv 是如何工作的?

标签 python virtualenv

我检查了 activate 脚本,在我看来它所做的只是:

  • 设置 VIRTUAL_ENV 环境
  • 在 PATH 前面附加 $VIRTUAL_ENV/bin

virtualenv 是如何通过这些提供神奇的虚拟环境的?我错过了什么?

最佳答案

我将描述我从@jcollado 链接到的演示文稿中学到的基本过程。

当 Python 启动时,它会查看二进制文件的路径及其前缀。

假设你的 virtualenv 是 /home/blah/scratch。 Python 进程知道它是从 /home/blah/scratch/bin/python 执行的(通常只是系统 python 二进制 /usr/bin/python 的副本) 并且它知道自己的版本 X.Y 因为它已编译到其中。然后 Python 按以下顺序查找 lib/pythonX.Y/os.py:

/home/blah/scratch/bin/lib/pythonX.Y/os.py
/home/blah/scratch/lib/pythonX.Y/os.py    <-- this file should exist
/home/blah/lib/pythonX.Y/os.py
/home/lib/pythonX.Y/os.py
/lib/pythonX.Y/os.py

它停在 /home/blah/scratch/lib/pythonX.Y/os.py 因为它是第一个实际存在的文件。如果没有,Python 会继续寻找。然后它基于此设置 sys.prefix。它使用类似的过程来设置sys.exec_prefix,然后基于这些构造sys.path

关于python - virtualenv 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427709/

相关文章:

python - Twisted epollreactor 是否使用非阻塞 dns 查找?

python - 使用gunicorn运行Django : Bad Request (400)

python - numpy中两个一维向量的点积

python - virtualenvwrapper默认将站点包存储在什么目录中?

python - python中的异或密码-奇数长度字符串

python - 复制 virtualenv 而无需在同一台机器上再次下载所有包

python - 不小心安装了两个版本的 Python 3.4.1...无法运行任何脚本,无法导入任何模块,我该如何解决?

python - 尝试设置 virtualenv 在安装 vatic 时出现错误 'cannot import name _remove_dead_weakref'

python - 无法导入已安装的包

python - Django Python : global name 'render' is not defined