命令:
\npip install -r requirements.txt\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nerror: externally-managed-environment\n\n\xc3\x97 This environment is externally managed\n\xe2\x95\xb0\xe2\x94\x80> To install Python packages system-wide, try apt install\npython3-xyz, where xyz is the package you are trying to\ninstall.\n\nIf you wish to install a non-Debian-packaged Python package,\ncreate a virtual environment using python3 -m venv path/to/venv.\nThen use path/to/venv/bin/python and path/to/venv/bin/pip. Make\nsure you have python3-full installed.\n\nIf you wish to install a non-Debian packaged Python application,\nit may be easiest to use pipx install xyz, which will manage a\nvirtual environment for you. Make sure you have pipx installed.\n\nSee /usr/share/doc/python3.11/README.venv for more information.\n\nnote: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.\nhint: See PEP 668 for the detailed specification.\nRun Code Online (Sandbox Code Playgroud)\n我希望有人向我解释该怎么做以及如何解决它。
\nJul*_*ard 102
这是因为您的发行版采用PEP 668 \xe2\x80\x93 将 Python 基础环境标记为 \xe2\x80\x9cexternally Managed\xe2\x80\x9d。
\nTL;DR:使用venv:
\npython3 -m venv .venv\nsource .venv/bin/activate\npython3 -m pip install -r requirements.txt\nRun Code Online (Sandbox Code Playgroud)\n长话短说:您的发行版试图防止您混合apt提供的包和pip提供的包。混合使用两个包管理器(apt以及pip此处)始终是一个坏主意,并且是许多问题的根源。
PEP 668 是发行版明确告诉用户避免陷入此陷阱的一种方式。您的发行版在消息中告诉您三种解决方案,但只有第二个完全适用于您的用例:
\napt install python3-xxx。它并不完全适合您,因为您有一个依赖项requirements.txt,而不是一个依赖项。如果文件中只有几个要求并且可以手动完成每个要求(例如apt install python3-xxx python3-yyy python3-zzz. 在这种情况下,包管理器没有奇怪的混合:您使用安装python3,apt您正在使用安装依赖项apt:毫不奇怪。python3 -m venv .venvthen source .venv/bin/activate,then pip install -r requirements.txt。在这种情况下,安装包含在.venv目录内:没有混合 apt 的功能和 pip 的功能,这并不奇怪。pipxwhich 并不完全适用于您的情况,pipx可以很好地安装和使用程序,例如pipx install black,但在这里您需要安装需求文件中列出的库,而不是程序。还有另一种方法,我自己经常使用,因为我经常需要多个不同的Python 版本:
\napt已安装的东西,并且不采用PEP 668. 我经常使用一个简短的 bash 函数自己编译许多 Python 解释器,该函数使用--prefix=~/.local/, 来进行测试。对于这些Python,我使用 venv 或旧的pip install,在这种情况pip下将安装它,同样,和~/.local/之间没有冲突,没有什么不好的惊喜。aptpipris*_*sar 31
--break-system-packages在 的末尾使用pip。
这将在您的本地用户目录中安装软件包~/.local/lib/python3.11。
pip install xyz --break-system-packages
Run Code Online (Sandbox Code Playgroud)
小智 11
将其添加到您的~/.config/pip/pip.conf文件中:
[global]
break-system-packages = true
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多,可以点击这里。