有没有办法在虚拟环境之外禁用 pip?

mas*_*mas 5 python package-management pip

自从询问有关处理 Python 包的 Pip 与包管理器的问题以来,我学到了很多东西,尤其是关于带有venv模块的虚拟环境。这些天我几乎只pip 在内部虚拟环境中安装包。我几乎很少安装系统范围的 python 包。

不过,我总是害怕的一件事是,我可能会在pip install没有意识到我没有venv激活的情况下运行 命令。

有没有办法在我不在时才将 pip 列入黑名单venv

ger*_*ijk 5

有一个全局选项require-virtualenv可以在操作时需要虚拟环境pip

实现此功能的几种方法(选择一种):

  • 作为配置选项(这是我的偏好),例如~/.config/pip/pip.conf/etc/pip.conf

    [global]
    require-virtualenv = True
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以运行此命令来修改/创建配置文件:

    pip config set global.require-virtualenv True
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用环境变量PIP_REQUIRE_VIRTUALENV并将其设置为 value true

  • 直接使用--require-virtualenv命令行选项。

如果您尝试在 virtualenv 之外安装软件包,您将看到以下错误:

ERROR: Could not find an activated virtualenv (required).
Run Code Online (Sandbox Code Playgroud)

如果您需要临时覆盖此选项以升级 pip 或在较旧的 Python 版本上安装 virtualenv,您可以在命令前面加上PIP_REQUIRE_VIRTUALENV=false.

注意:在较旧的 pip 版本(< 22.0)中,输出和文档中似乎缺少此选项--help,但它对我来说工作得很好。在 Python 2.7.x 上使用 20.3.4 作为最新版本进行了测试。

旁注:PEP 704(撰写本文时的草案)是“[...]建议像 pip 这样的包安装程序在 Python 3.13+ 上默认需要虚拟环境”的提案。


小智 3

您可以使用 shell 别名pip在 venv 之外进行接管。

alias 'pip=cowsay "You are not in a virtual environment"'

在 virtualenv 启动文件中(例如,当您输入 venv 时获取的文件):

unalias 'pip'