virtualenv-鸟瞰图的理解

时间:2018-11-17 23:12:27

标签: python python-3.x virtualenv

使用Windows

了解virtualenv。这是我对此的理解以及我有的几个问题。如果我的理解不正确,请纠正我。

virtualenv是为特定项目存储pip依赖性及其所选版本的环境。为您的项目创建一个文件夹,并且内部有依赖项。

  1. 有人告诉我您不想将.py脚本保存在虚拟ENV中,如果是这样的话,当我想运行该项目时如何访问虚拟env?在命令行中source ENV/bin/activate下打开它,然后cd打开我的脚本存储位置吗?

  2. 通过运行pip freeze在该项目文件夹中仅创建一个txt文件,创建一个requirements.txt文件。该虚拟环境的依赖项副本?

  3. 如果我在另一个virutalenv中,我应该导入另一个virtualenv的要求?我去过文档,但还是不明白。

    $ env1 / bin / pip冻结> requirements.txt

    $ env2 / bin / pip install -r requirements.txt

猜猜我对“要求”描述感到困惑。最佳做法不是总是调用我们的requirements.txt吗?如果是这种情况,env2怎么知道我要env1的要求?

感谢您提供任何信息或建议。非常感谢您的协助。

我创建了一个virtualenv C:\Users\admin\Documents\Enviorments>virtualenv django_1 使用基本前缀'c:\\users\\admin\\appdata\\local\\programs\\python\\python37-32' C:\Users\admin\Documents\Enviorments\django_1\Scripts\python.exe Installing setuptools, pip, wheel...done.

中的新python可执行文件

如何激活它? source django_1/bin/activate不起作用?

我尝试过:source C:\Users\admin\Documents\Enviorments\django_1/bin/activate 每次我都得到:“源”不被识别为内部或外部命令,可操作程序或批处理文件。

3 个答案:

答案 0 :(得分:0)

*免责声明*我主要使用conda环境而不是virtualenv,但是我相信大多数情况在这两个环境中都是相同的,并且适用于您的情况。

  1. 您应该能够从所处的任何环境访问脚本。如果您具有virtenvA和virtenvB,则可以从在任何环境中访问脚本。您要做的只是激活其中之一,然后运行python /path/to/my/script.py,但是您需要确保已安装任何从属库。

  2. 是正确的,但为清楚起见,需求文件仅按名称包含依赖项列表。它不包含任何实际的代码或包。您可以打印出一个需求文件,但是它应该只是一个列表,其中列出了软件包名称及其版本号。像pandas 1.0.1 numpy 1.0.1 scipy 1.0.1

  3. 在此处的代码行中,您将导出env1的依赖项列表,然后将这些依赖项安装在env2中。如果env2为空,那么它现在只是env1的副本,否则它将是相同的,但是添加了env1的所有软件包,并且版本号不同。一些相同的软件包,然后将被覆盖

答案 1 :(得分:0)

virtualenv只是为您的项目创建一个新的Python环境。可以将其视为系统中拥有的Python的另一个副本。虚拟环境有助于开发,尤其是在您需要相同库的不同版本时。

第一个问题的答案是,是的,对于每个使用virtualenv的项目,您需要先将其激活。激活后,当您运行python脚本时,不仅项目脚本,而且所有python脚本都将使用活动Python环境的依赖关系和配置。

回答第二个问题,pip freeze > requirements.txt将在活动文件夹而不是项目文件夹中创建需求文件。因此,假设在您的cmd /终端中您在C:\Desktop中,那么将在此处创建需求文件。如果您位于C\Desktop\myproject文件夹中,则将在此处创建文件。需求文件将包含安装在活动virtualenv上的软件包。

第三个问题的答案与第二个问题有关。简单来说,您需要编写第二个需求文件的完整路径。因此,如果您在第一个项目中,并且想从第二个virtualenv安装软件包,则可以像env2/bin/pip install -r /path/to/my/first/requirements.txt一样运行它。如果在您的终端中,您所在的活动文件夹中没有Requirements.txt文件,那么运行pip install会给您一个错误。因此,运行命令并不知道您要使用哪个需求文件,而是对其进行指定。

我创建了一个virtualenv C:\Users\admin\Documents\Enviorments>virtualenv django_1 Using base prefix 'c:\\users\\admin\\appdata\\local\\programs\\python\\python37-32' New python executable in C:\Users\admin\Documents\Enviorments\django_1\Scripts\python.exe Installing setuptools, pip, wheel...done.

如何激活它? source django_1/bin/activate不起作用?

我已经尝试过:source C:\Users\admin\Documents\Enviorments\django_1/bin/activate每次得到:'source'不会被识别为内部或外部命令,可操作程序或批处理文件。

答案 2 :(得分:0)

  1. 是的,将virtualenv与项目文件分开保存是概念之一。 virtualenvwrapperpipenv就是这样。但是就我个人而言,如果我以最简单的形式使用virtualenv,则只需在virtualenv目录(bin/之后)中创建具有相同名称的目录,并将项目文件保存在那里。

  2. pip freeze打印以使用pip控制台virtualenv内部安装的软件包(及其版本)。如果要将这些要求保存到文件中,则应执行类似pip freeze > requirements.txt

  3. 的操作
  4. 可能性很小:

    • 您可以激活一个虚拟环境,然后(cd /path/to/venv2)转到另一个虚拟环境。
    • 您可以从一个virtualenv复制requirements.txt文件,并将这些要求安装在第二个virtualenv中。