Python 的虚拟环境

5

您好,我已经阅读了很多关于虚拟环境的内容,但是似乎有一件事情我还没有搞清楚。

我的路径如下:

../my_app/
../my_app/app.py
..etc

虚拟环境应该放在哪里? 是放在my_app文件夹内,例如:/my_app/venv/bin,include,lib,还是与my_app文件夹同级?

/my_app/
/venv/

我不明白位置是否重要,还是通过使用activate将引用它而不是进入主环境。

希望我的问题清晰明了。

谢谢!


考虑使用 virtualenvwrapper -- 它有更多的功能并且更易于使用。http://virtualenvwrapper.readthedocs.org/en/latest/ - johntellsall
2个回答

3
我建议使用virtualenv创建的根目录作为你的源文件的根目录。Virtual环境被设计为与一个项目绑定在一起,而不是在不同的项目之间共享。例如,假设我在我的"~/school"目录中编写了很多代码。那么我会在该目录下执行"cd"命令,然后输入"virtualenv ENV"进行设置。现在我有了一个名为"ENV"的目录,用于保存我的项目所需要的源文件和依赖项。因此,您可以创建一个 "~/school/ENV/source" 文件夹来保存所有的源文件夹。所有虚拟环境文件都靠近您的程序,在 "ENV" 目录中很容易访问。
编辑:
回答您问题的其中一个部分:只要您跟踪您的环境,并在运行Python程序和使用pip安装依赖项之前使用 "source bin / activate" 命令,您可以在任何地方安装您的虚拟环境。

仅作概述。虚拟环境是用作引用而不是包含文件夹,对吗? - villancikos
如果你说“虚拟环境被用作引用”,我不是很确定你的意思。如果你能提供更多详细信息,我很乐意回答。 - Blake G
1
我的意思是,虚拟环境只是一个保存pip安装的所有内容的地方。当你激活它时,“终端”会引用该位置。因此,最终那个文件夹在哪里并不重要,只要在需要时激活它即可。因此,只要记住哪个虚拟环境与哪个项目/应用程序相关联,你的虚拟环境和项目/应用程序可以位于不同的位置。 - villancikos

2
我不确定位置是否重要,或者使用activate是否会引用它而不是进入主环境。
这并不重要,因为activate会正确处理路径,但是你不应该将虚拟环境放在源代码中,因为它不是你的应用程序的一部分(也不可移植)。相反,创建一个具有您要求的文件并将其放在您的源代码控制下。
你应该把它放在除了你的源代码之外的任何目录中。activate脚本将确保路径指向正确的位置。
这是一个例子:
$ virtualenv /home/somedir/envs/myenv
... # some output
$ source /home/somedir/envs/myenv/bin/activate
(myenv) $ mkdir /home/somedir/projects
(myenv) $ cd /home/somedir/projects
(myenv) projects $ 

如你所见,虚拟环境在 envs 目录中,名称为 myenv。你的源代码位于 /home/somedir/projects。输入 deactivate 命令退出虚拟环境。

我完全不同意。虚拟环境是可移植的。这就是 pip freeze > requirements.txt 的作用。它允许你在任何地方复制你的虚拟环境。而且虚拟环境与个别项目紧密耦合,所以除了与源代码/项目文件一起保存,你为什么要将其保存在其他地方呢? - Blake G
要创建requirements文件,您不需要虚拟环境,它是一个纯文本文件。您不能在不同机器之间移动虚拟环境并期望其正常工作,您可以相信我的话 - 或者等待您的同事在Windows上工作并使用他的虚拟环境更新您的存储库,然后等待在您的Linux或OSX机器上运行它。 - Burhan Khalid
你不需要传输实际的虚拟环境,而是使用 requirements.txt 文件重新创建它。在版本控制中忽略虚拟环境,并在本地重新创建它们。 - Blake G
这就是为什么我说不要把它和源代码放在一起。将要求文件与您的源代码放在一起,而不是环境本身。 - Burhan Khalid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接