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

Python pip的--user选项在Windows上有什么用途?,python,pip,Python,Pip,我知道,当我在Linux上安装Python软件包时,我需要使用pip的-user选项在我的主目录中安装该软件包,否则我将需要root权限。但在Windows上,无论我是否使用此选项,软件包都将始终安装在我的主目录C:\Users\{username}\…,但具体路径略有不同。使用-user选项,包将安装到c:\users\{username}\appdata\roaming\python\python37\site包,而没有此选项,包将安装到c:\users\{username}\appdata

我知道,当我在Linux上安装Python软件包时,我需要使用pip的-user选项在我的主目录中安装该软件包,否则我将需要root权限。但在Windows上,无论我是否使用此选项,软件包都将始终安装在我的主目录C:\Users\{username}\…,但具体路径略有不同。使用-user选项,包将安装到c:\users\{username}\appdata\roaming\python\python37\site包,而没有此选项,包将安装到c:\users\{username}\appdata\local\programs\python\python37-32\lib\site包

所有命令都是在普通用户(而不是管理员)下运行的


那么,在Windows上使用pip的-user选项有什么用呢?每当我安装软件包时,是否需要使用-user选项?

如果在安装软件包时没有使用-user选项,而是以管理员身份登录,那么该软件包将安装在Python安装的Lib/site packages目录中,并可供所有用户帐户使用。如果您使用了-user选项,那么正如您所看到的,该软件包将在本地安装,并且只对管理员的帐户可见。

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

根据,当您运行安装程序并单击“立即安装”时:

除非需要对C运行时库进行系统更新,或者为所有用户安装了用于Windows的Python Launcher,否则您不需要成为管理员 Python将安装到您的用户目录中 将根据第一页底部的选项安装Python Launcher for Windows。 现在,Python启动器的选项在默认情况下也被选中。这意味着,如果您的用户帐户位于管理员组(通常是管理员组),Python.exe将安装在您的%LocalAppData%目录中,正如您所观察到的那样。但是,安装程序仍然会向您显示UAC提示,以确认您具有管理员权限,因为它还希望安装Python启动器py.exe。您最终在用户目录中安装了一个本地的、仅供我使用的Python,尽管出于某种无形的原因,启动器是为所有用户安装的

如果您确实希望在系统范围内安装Python,则需要在安装程序的第一个屏幕上选择CustomizeInstallation,然后单击Next,并选中Install for all users(为所有用户安装),否则不会选中该选项。安装位置将默认为%ProgramFiles%目录,通常为C:\Program Files

当您使用pip进行用户安装时,它会将包放在您的%AppData%目录中,正如您所观察到的,该目录在您的用户配置文件中是AppData\Roaming。这样,当您在域网络上拥有漫游帐户时,无论您从网络上的哪台计算机登录,您个人安装的软件包都会跟着您。显然,这台计算机必须为所有用户安装一个系统范围的Python——Python解释器,而不是几乎无关的Python启动器。这就是上面描述的默认行为完全没有意义的地方,因为当您登录到其他用户的计算机时,您将无法运行本地安装在其他用户配置文件中的Python解释器

最重要的是,如果你真的使用你的个人资料漫游域网络,那么所有这些用户包(很可能包含数千个文件)都会减慢登录过程:这些文件中的每一个都必须在域存储和本地计算机之间同步


一句话:如果您想正确设置,请自定义您的安装,以确保它安装在所有用户都可以访问的某个目录中。就我个人而言,我喜欢将它放在C:\programs\Python中,因为这样我就可以为每个人安装任何东西,甚至不需要提升的提示符——这是写入C:\Program文件的提示符。同样,根据具体情况,要求提升提示可能是可取的。

但事实是,我不是以管理员身份登录的,而是一个普通用户。请再次阅读我的答案。您问了'-user'的意义是什么。如果您是以非管理员身份登录的,那么无论您是否使用此选项,都不会有太大区别。但是,如果您以管理员身份登录,则会有很大的不同。如果没有-user,包对所有帐户都可见;如果没有-user,包只对当前登录的管理员帐户可见。现在我明白了。谢谢你的耐心。
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: