如何将pip包全局安装而不是本地安装?

182

我正在尝试使用pip3安装flake8包,但似乎它拒绝安装,因为已经安装在本地某个位置。

我该如何强制将其全局安装(系统级别)?

pip3 install flake8
Requirement already satisfied (use --upgrade to upgrade): flake8 in ./.local/lib/python3.4/site-packages
请注意,我更喜欢一种通用的解决方案(适用于Debian,OS X甚至Windows),它应该在任何平台上使用,所以我不想自己指定目标。
由于某种奇怪的原因,它的行为就好像我已经指定了“--user”,但在我的情况下我没有这样做。
我能够全局安装软件包的唯一方法是先将其删除,然后再重新安装。不知何故,如果本地存在软件包,则pip(8.1.1)似乎拒绝在全局安装该软件包。
免责声明:在实验过程中未使用或损坏任何虚拟环境。

9
你尝试过使用根用户或sudo吗? - matino
1
你尝试过运行 pip install flake8 --upgrade 吗? - Mauro Baraldi
1
如果遇到与虚拟环境(venv)使用相关的类似问题,请使用--system-site-packages选项将全局安装的包继承到您的venv中。请参阅https://stackoverflow.com/a/61326709/4445175 - Wlad
8个回答

223

为什么不尝试使用H标志来运行sudo?这应该能解决问题。

sudo -H pip install flake8

普通的sudo pip install flake8将尝试使用您自己的主目录。 -H指示其使用系统的主目录。有关更多信息,请访问https://dev59.com/X1cP5IYBdhLWcg3w6-Op#43623102/


293
“H" 代表 Hlobal 吗? - Matt
151
“-H”表示“嘿sudo,停止使用我的主目录,使用你自己的主目录。” - nikhilweee
14
这并没有真正地将其全局安装,而是似乎只是将其存储在用户“root”的主目录中。 - parsecpython
2
@nikhilweee,我不明白这与在虚拟环境未激活时运行“pip3 install ipython”有何不同,它们似乎都安装到相同的“site-packages”目录中。 - iamfrancisyo
2
“sudo pip install” 可能是一种不好的做法。 - nocibambi
显示剩余3条评论

17

也许使用--force-reinstall可以解决问题,否则使用--ignore-installed应该也可以。


9
在Python中,pip安装的位置在哪里?
我将提供一个 Windows 解决方案,这是我遇到的问题,花了一些时间才解决。
首先,在Windows上(我将以 Windows 作为操作系统),如果您执行 "pip install ",它将默认全局安装(如果您没有激活虚拟环境)。 一旦您激活了虚拟环境并进入其中,所有pip安装都将在该虚拟环境中进行。 pip正在安装所需的软件包但我无法使用它们?
对于此,pip可能会给出警告,指出pip可执行文件如 pip3.exe、pip.exe 不在您的路径变量中。 您可以将此路径(通常为“C:\Users\\AppData\Roaming\Programs\Python\”)添加到您的环境变量中。 之后重新启动cmd,现在尝试使用已安装的Python包。 现在应该能够正常工作了。

9

适用于Windows 10:

安装Python供所有用户使用非常简单,因为在安装时,您需要勾选一个“所有用户”复选框。

要在C:\ Program Files \ Python310 \ Lib \ site-packages下全局安装模块,请以管理员身份启动CMD提示符,然后安装模块。

python -m pip install selenium

5

对于Windows系统:

您是否在使用virtualenv?如果是,请退出虚拟环境。如果您没有使用虚拟环境,则该软件包应已安装在系统级别(全局)。在这种情况下,请尝试升级软件包。

pip install flake8 --upgrade

6
有些不准确。 - GMaster
这是一个问题,目的在于没有清晰地提出问题(它要求一个“通用”的解决方案,在所有操作系统上都能最好地运行)。在Linux上,这个答案是错误的:如果你不在pip install前面使用sudo,它将被安装在.local目录中,那么这个答案就是错误的。在Windows上,它应该是正确的。 - questionto42

1

我其实并没有看出你的问题所在。全局(Globally)是指任何位于Python3路径下的site package文件夹中的包。

如果您只想在本地使用它,则必须配置虚拟环境并在激活虚拟环境后重新安装软件包。

“Original Answer”翻译成中文为“最初的回答”。


3
创建虚拟环境时,您可以使用--system-site-packages .venv/dev命令来继承全局依赖包,以便在每个虚拟环境中不必重新安装它们。这对于那些可能希望在任何项目中使用的依赖包如black、flake8和pytest等是有意义的。例如:python -m venv --system-site-packages .venv/dev - Wlad
2
我认为他们指的是它被安装在.local目录中的事实。 我在Windows上遇到了相同的问题,在那里它会错误地安装到c:\ users \ username \ appdata \ roaming \ python \ python39 \ site-packages而不是c:\ program files \ python39 \ lib \ site-packages。 我认为这是因为权限不足,但一旦安装后,即使拥有足够的权限,它也拒绝安装到全局目录。 - cowlinator
@cowlinator 第一部分关于 .local 的内容已经理解。第二部分在 Windows 上可能是正确的,但我没有测试过。而在 Linux 上,“即使具有足够的权限,一旦安装,它也拒绝安装到全局目录”是错误的,我已经测试过:首先我在没有使用 sudo 的情况下将其安装到了 .local 目录,也就是本地安装。然后再使用 sudo 安装,它就会被安装到全局。本地安装并不会阻止全局安装。 - questionto42
“全球化”意味着它应该适用于任何用户,而不仅仅是当前用户。 - Nicola Musatti

0
抱歉挖掘这个话题,但在Windows操作系统上可能会遇到多个问题。
1. 当前用户在Python位置缺乏权限。 2. 用户的AppData/Python位置未添加到PATH中。 3. 使用--user标志安装了软件包。
如何真正解决这些问题:
1. 打开你的Python位置,点击属性 -> 安全 -> 编辑。 2. 点击添加...,添加"Users"组,或者添加使用Python的当前用户。勾选"完全控制"复选框。 3. 更改Windows变量,在PATH中添加C:\Users\your_username\AppData\Roaming\Programs\。这样可以让你为当前用户而不是全局安装软件包。

-1

这是打开以管理员身份运行CMD的关键,

然后确保命令使用python而不是python3

例如:

python -m pip install pre-commit 

无论您使用python还是python3,对于全局安装和本地安装来说可能没有什么区别。这取决于您的系统设置以及python指向的是什么。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接