Windows上pip的--user选项有什么用?

时间:2019-06-25 10:02:41

标签: python pip

我知道,当我在Linux上安装Python软件包时,需要使用--user的{​​{1}}选项将软件包安装到主目录中,否则需要root特权。但是在Windows上,无论我是否使用此选项,该软件包始终将安装在我的主目录(pip)中,但是特定路径会稍有不同。使用C:\Users\{username}\...选项,该软件包将被安装到--user,而如果没有此选项,该软件包将被安装到c:\users\{username}\appdata\roaming\python\python37\site-packages

c:\users\{username}\appdata\local\programs\python\python37-32\lib\site-packages

所有命令均在普通用户而非管理员下运行。

那么Windows上pip的C:\>pip3 install pyyaml Collecting pyyaml Using cached https://files.pythonhosted.org/packages/45/19/53c041b8719eaf88ce1cdb51bea1c5a2844433e79c23a2a8aeeaa0e27fd8/PyYAML-5.1.1-cp37-cp37m-win32.whl Installing collected packages: pyyaml Successfully installed pyyaml-5.1.1 C:\>pip3 show pyyaml Name: PyYAML Version: 5.1.1 Summary: YAML parser and emitter for Python Home-page: https://github.com/yaml/pyyaml Author: Kirill Simonov Author-email: xi@resolvent.net License: MIT Location: c:\users\{username}\appdata\local\programs\python\python37-32\lib\site-packages Requires: Required-by: C:\>pip3 uninstall pyyaml Uninstalling PyYAML-5.1.1: Would remove: c:\users\{username}\appdata\local\programs\python\python37-32\lib\site-packages\_yaml.cp37-win32.pyd c:\users\{username}\appdata\local\programs\python\python37-32\lib\site-packages\pyyaml-5.1.1.dist-info\* c:\users\{username}\appdata\local\programs\python\python37-32\lib\site-packages\yaml\* Proceed (y/n)? y Successfully uninstalled PyYAML-5.1.1 C:\>pip3 install --user pyyaml Collecting pyyaml Using cached https://files.pythonhosted.org/packages/45/19/53c041b8719eaf88ce1cdb51bea1c5a2844433e79c23a2a8aeeaa0e27fd8/PyYAML-5.1.1-cp37-cp37m-win32.whl Installing collected packages: pyyaml Successfully installed pyyaml-5.1.1 C:\>pip3 show pyyaml Name: PyYAML Version: 5.1.1 Summary: YAML parser and emitter for Python Home-page: https://github.com/yaml/pyyaml Author: Kirill Simonov Author-email: xi@resolvent.net License: MIT Location: c:\users\{username}\appdata\roaming\python\python37\site-packages Requires: Required-by: 选项有什么用?每当我安装软件包时是否需要使用--user选项?

2 个答案:

答案 0 :(得分:1)

Windows Python安装程序如何使用默认设置(您最可能使用的默认设置)来处理安装位置确实令人困惑。

根据the documentation,在运行安装程序时,只需单击“立即安装”:

  
      
  • 您将不需要成为管理员(除非需要对C运行时库进行系统更新,或者为所有用户安装适用于Windows的Python启动器)
  •   
  • Python将被安装到您的用户目录中
  •   
  • 将根据第一页底部的选项安装适用于Windows的Python启动器。
  •   

现在,默认情况下还 选择了Python Launcher的选项。这意味着,如果您的用户帐户位于“管理员”组中(通常是),则Python(python.exe)将安装在您的%LocalAppData%目录中(正如您所观察到的)。但是,安装程序仍会向您显示UAC提示,以确认您具有管理员权限,因为它也想安装Python Launcher(py.exe)。您最终会在用户目录中进行本地“仅适合我”的Python安装,尽管出于某种无形的原因,启动器是“为所有用户”安装的。

如果您确实要在系统范围内安装Python,则需要在安装程序的第一个屏幕上选择“自定义安装”,然后单击“下一步”,然后选中“为所有用户安装”。否则检查。然后,安装位置将默认为您的%ProgramFiles%目录,通常为C:\Program Files

使用pip进行用户安装时,它将把软件包放在您的%AppData%目录中,该目录在用户配置文件中的AppData\Roaming中(您也已经看到)。这样一来,当您在域网络上拥有“漫游”帐户时,无论您从网络上的哪台计算机登录,都可以随心所欲地安装软件包来跟踪您。显然,该计算机必须具有系统范围的Python “针对所有用户”的安装-Python 解释器的安装,而不是几乎无关的Python Launcher 。这就是上面描述的默认行为绝对为 zero 的地方,因为当您执行某些 other 用户配置文件时,您将无法运行本地安装的Python解释器登录到他们的计算机。

最重要的是,如果您实际上确实使用您的个人资料“漫游”域网络,则所有这些--user软件包(很可能不包含数千个文件) ,这会减慢登录过程的速度:这些文件中的每个文件都必须在域存储和本地计算机之间进行同步。

底线:如果要正确设置此设置,请自定义安装,以确保将其安装在所有用户实际上可以访问的 某个目录中。就个人而言,我喜欢将其放在C:\programs\Python中,因为这样我就可以为所有人pip install进行任何操作,甚至不需要提升的提示,即可以将其写入C:\Program Files。再根据情况,建议提高提示速度。

答案 1 :(得分:0)

如果在不使用--user选项的情况下安装软件包时以管理员身份登录,则该软件包将被安装在Python安装目录的Lib/site-packages目录中,并且可用于所有用户帐户。相反,如果您使用了--user选项,那么,如您所见,该软件包将“本地”安装,并且仅对管理员帐户可见。