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

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

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

要求文件包含所有已安装包的精确版本。 可以使用要求文件来冻结环境的要求。 使用精确的包版本,你可轻松地在其他计算机上重现环境。 即使采用一个版本范围(作为另一个包的依赖项)或使用安装程序而非 pip 安装了包,要求文件也会包含这些包。

先决条件

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

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

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

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

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

    显示如何在 Visual Studio 2019 中从要求文本文件安装 Python 包的屏幕截图。

    显示如何在 Visual Studio 2022 中从要求文本文件安装 Python 包的屏幕截图。

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

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

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

在虚拟环境中安装依赖项

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

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

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

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

生成 requirements.txt 文件

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

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

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

    显示如何在 Visual Studio 2019 中为 Python 包依赖项生成要求文本文件的屏幕截图。

    显示如何在 Visual Studio 2022 中为 Python 包依赖项生成要求文本文件的屏幕截图。

刷新或向现有 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...