当前位置: 首页 > 面试题库 >

virtualenv如何工作?

秦俊发
2023-03-14
问题内容

我检查了 激活 脚本,它看上去对我来说是:

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

这些如何virtualenv提供神奇的虚拟环境?我想念什么?


问题答案:

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

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

因此,假设您的virtualenv是/home/blah/scratch。Python进程知道它是从其执行/home/blah/scratch/bin/python(通常只是系统python二进制文件的一个副本/usr/bin/python),并且它知道自己的版本,X.Y因为它已被编译到其中。然后,Pythonlib/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基于这些过程进行构造。



 类似资料:
  • 问题内容: 我是virtualenv的新手,但是我正在编写django应用程序,最后我将不得不以某种方式进行部署。 因此,假设我的应用程序在安装了所有必需库的本地virtualenv上运行。我现在想做的是运行某种脚本,它将使用我的virtualenv,检查其中安装了什么,并生成一个脚本,将所有这些库安装在另一台计算机上的最新virtualenv上。如何做到这一点?请帮忙。 问题答案: 您无需复制粘

  • 问题内容: 我有一个现有的virtualenv,其中包含很多软件包,但是旧版本的Django。 我想要做的就是复制此环境,因此我拥有另一个环境,该环境具有完全相同的软件包,但更新版本的Django。我怎样才能做到这一点? 问题答案: 最简单的方法是使用pip生成需求文件。需求文件基本上是一个文件,其中包含要安装(或在pip生成文件的情况下已经安装)的所有python软件包的列表,以及它们的版本。

  • 我之前让Conda在Mojave上流畅运行,但我发现升级到Catalina会将“anaconda3”文件夹移动到您的桌面 我在这里尝试了建议,写在下面: 嗨,我可能有个解决办法 将位于Relocated Items中的文件夹anaconda3复制到 /Users/myname/ 打开终端 输入:导出PATH="/用户/myname/anaconda3/bin:$PATH" 输入:conda ini

  • 问题内容: 我打算为Python安装一个虚拟环境,以使我的Python包分开。这样做的动机之一也是在我的机器上同时存在两个版本的Python(Ubuntu 14.04)。我有以下奇观: 应该以什么顺序安装Python,PIP和virtualenv?有关系吗? 完成后,如何在virtualenv下将两个python版本分开? 假设我正在处理单独的项目,是否建议将每个项目都保存在virtualenv创

  • 问题内容: 我试图找出为什么找不到使用using安装的我和/或包装器。我认为是因为它没有添加到我的PATH中: 和: 我安装使用PIP和使用,没有任何问题。我尝试重新安装,但这也没有用。我如何知道要添加的路径?只是似乎安装到的路径?那似乎是: 我还找到了本指南,该指南建议: 但是,这并不能帮助我运行。我在Mac OSX 10.7.5(Lion)上。 问题答案: 似乎我自己是几乎所有“简单”安装过程

  • 问题内容: 在使用以下代码初始化时,我拼错了名称: 我实际上打算用名称创建环境。尝试将文件夹重命名为时,我发现这没有太大帮助。激活环境的名称仍重命名旧的。 我想知道如何重命名环境? 问题答案: 默认情况下,virtualenv不支持环境重命名。仅删除virtualenv目录并使用正确的名称创建一个新目录是更安全的。您可以通过以下方式做到这一点: 激活您的virtualenv: 创建当前安装的软件包