为什么我的pip安装需要使用'python -m install --user'命令?

4

我正在虚拟环境中运行此程序。

当我输入:

pip install django

我得到了以下错误:

ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: /home/ENV/env/lib/python3.5/site-packages/pytz Consider using the --user option or check the permissions.

为了使其工作,我实际上需要输入:

python -m pip install --user django

为什么?


如果您使用的是 Windows 操作系统,请勿允许 Python 安装 Django。 - Hamza Lachi
可能是[“pip install --user ...”有什么用?]的重复问题。(https://dev59.com/dFgQ5IYBdhLWcg3wSyEO) - Sundeep Pidugu
@SundeepPidugu 不是很对,你忘了 python -m 这一部分。 - RMPR
1
这个问题也很重要,因为python -m用于指定解释器,你不能忽视这一点。如果你安装了多个版本的Python,跟踪pip绑定的Python版本是一个麻烦事情,在我看来,因此在这种情况下,使用python -m可以确保执行的是与所调用的Python绑定的pip。 - RMPR
所以它是what-is-the-purpose-of-the-m-switch和你的问题的结合。 - RMPR
显示剩余4条评论
3个回答

3
让我们来解释一下你在第一个命令中添加的两个语句: python -m install --user django
  • python -m:允许使用Python模块名称空间作为脚本进行定位。激励例子是标准库模块,如pdb和profile. 有关详细信息,请参见PEP 338

  • --user:默认情况下,pip将Python包安装到系统目录中,这需要root权限才能完成。为了避免使用sudo pip install(顺便说一下,这不被推荐),可以使用此标志使pip将软件包安装在您的主目录中,而这并不需要任何特殊权限。

顺便说一下,如果您安装了多个版本的Python,则跟踪哪个Python版本与pip绑定可能会很麻烦,因此在这种情况下最好使用python -m,以确保执行的是所调用的Python绑定的pip。


1

0
错误基本上说明您没有权限将文件写入计算机,因此如果您是root用户(或管理员),则始终可以使用以下命令安装Python包:
sudo pip install django
或者 pip install --user django
--user使pip在您的主目录中安装软件包,而不需要任何特殊权限。

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