使用 requirements.txt 管理所需的 Python 包

如果与他人共享 Python 项目,或使用生成系统生成 Python 应用程序,则需要指定任何必需的外部包。 计划将项目复制到需要还原环境的其他位置时,还需要定义所需的依赖包。

指定外部依赖 Python 包的建议方法是使用 要求文件 (readthedocs.org)。 此文件包含 pip 命令列表,这些命令为项目安装任何所需版本的依赖包。 最常见的命令是 pip freeze > requirements.txt。 此命令将环境的当前包列表记录到 requirements.txt 文件中。

要求文件包含所有已安装包的精确版本。 可以使用要求文件来冻结环境的要求。 通过使用精确的包版本,可以轻松地在另一台计算机上重现环境。 要求文件包括包,即使它们随版本范围一起安装,作为另一个包的依赖项,或者与 pip 以外的安装程序一起安装。

先决条件

  • 安装了支持 Python 工作负载的 Visual Studio。 有关详细信息,请参阅 在 Visual Studio中安装 Python 支持。

  • 需求文件。 可以使用现有要求文件或 生成文件 ,如本文所述。

从技术上看,任何文件名都可用于跟踪要求。 但是,Visual Studio 为名为“requirements.txt”的需求文件提供特定支持。当安装包时,可以使用参数 -r <full path to file> 来指定文件的首选名称。

安装 requirements.txt 中列出的依赖项

如果加载具有 requirements.txt 文件的项目,则可以安装文件中列出的所有包依赖项。

  1. 解决方案资源管理器中,展开项目,然后展开 Python 环境 节点。

  2. 找到要为其安装包的环境节点。 右键单击节点,然后 从 requirements.txt中选择“安装”。

  3. 可以在 “输出 ”窗口中监视包安装过程:

    显示从要求文本文件安装 Python 包的输出的屏幕截图。

    输出列出了已安装的任何必需包,以及受影响的 pip 命令所需的任何更新以及更新的 pip 版本的可用性。

在虚拟环境中安装依赖项

还可以在现有虚拟环境中安装 Python 包依赖项。

  1. 解决方案资源管理器中,展开项目,然后展开 Python 环境 节点。

  2. 找到要为其安装包的虚拟环境节点。 右键单击节点,然后 从 requirements.txt中选择“安装”。

如果需要创建虚拟环境,请参阅 “使用虚拟环境”。

生成 requirements.txt 文件

如果项目中已安装所有必需的 Python 包,则可以在 Visual Studio 中生成 requirements.txt 该文件。

  1. 解决方案资源管理器中,展开项目,然后展开 Python 环境 节点。

  2. 找到要为其生成要求文件的环境节点。 右键单击节点,然后选择“ 生成 requirements.txt”。

刷新或向现有 requirements.txt 文件添加条目

requirements.txt如果文件已存在,Visual Studio 将显示一个提示,其中包含多个选项:

当要求文本文件已存在时显示的提示的屏幕截图,其中包含更新或添加条目的选项,或替换该文件。

  • 替换整个文件:覆盖requirements.text文件中定义的所有项、注释和选项。
  • 刷新现有条目:更新文件中的版本说明符 requirements.text 以匹配当前安装的版本。
  • 更新和添加条目:刷新文件中的现有要求 requirements.text ,并将所有新的包要求追加到文件末尾。

Visual Studio 运行 pip 以检测环境的当前包要求,然后根据所选内容更新 requirements.txt 文件。

手动安装包依赖项

如果 pip 未安装文件中定义的 requirements.txt 包依赖项,则整个安装将失败。

有两个选项可以解决此问题:

  • 手动编辑 requirements.txt 文件以排除失败的包,然后重新运行安装过程。

  • 使用 pip 命令选项 引用包的可安装版本。

使用 pip wheel 更新要求文件

如果使用 pip wheel 命令编译依赖项,则可以将 --find-links <path> 选项添加到 requirements.txt 文件。

  1. pip wheel调用命令以编译所需依赖项的列表:

    pip wheel azure
    

    输出显示为收集的包生成的轮子:

    Downloading/unpacking azure
        Running setup.py (path:C:\Project\env\build\azure\setup.py) egg_info for package azure
    
    Building wheels for collected packages: azure
        Running setup.py bdist_wheel for azure
        Destination directory: c:\project\wheelhouse
    Successfully built azure
    Cleaning up...
    
  2. find-linksno-index选项以及包版本要求追加到requirements.txt文件中:

    type requirements.txt
    --find-links wheelhouse
    --no-index
    azure==0.8.0
    
  3. 使用更新的要求文件运行 pip 安装过程:

    pip install -r requirements.txt -v
    

    输出跟踪安装过程的进度:

    Downloading/unpacking azure==0.8.0 (from -r requirements.txt (line 3))
        Local files found: C:/Project/wheelhouse/azure-0.8.0-py3-none-any.whl
    Installing collected packages: azure
    Successfully installed azure
    Cleaning up...
        Removing temporary dir C:\Project\env\build...