pip3和python3 -m pip之间的区别

时间:2016-12-23 19:47:14

标签: python python-3.x pip

我正在尝试使用pip和python3安装一些软件包。我正在使用MacOS,所以默认情况下,当我运行pip时,它使用的是我的Python 2版本。

我可以使用:

在python 3中安装软件包
$ pip3 install package_name

然而,我能够做到(至少看起来):

$ python3 -m pip install package_name

我想知道pip3python3 -m pip是否具有相同的效果。

3 个答案:

答案 0 :(得分:9)

他们是一样的。如果查看bin文件夹中的pip3文件,它会从pip模块调用main函数。

pip3 install package_name在bin文件夹中运行pip3文件:

# bin/pip3 
# or bin/pip if using pip install package_name

import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

python3 -m pip install package_name运行pip模块的__init__.py文件。

# pip/__init__.py
if __name__ == '__main__':
    sys.exit(main())

它们都运行相同的main()函数

答案 1 :(得分:1)

正如@tihorn所说,pip3python3 -m pip 应该相同。至少有一个例外:如果它们不在同一路径中。我有以下设置:

$ which pip3
/usr/bin/pip3
$ which python3
/home/username/anaconda3/bin/python3

使用pip3安装模块并使用pip3 freeze进行验证后,运行python3 my_script.pypython3 -c 'import my_module'时无法访问它们。我遇到了ModuleNotFound错误。

答案 2 :(得分:0)

其他答案在技术上是正确的,但对于为什么有点不清楚 Python 同时具有 pip3python3 -m pip

如果您的机器上安装了多个 Python,则使用 pip3 全局安装软件包可能不明确

许多人在升级计算机的操作系统后最终安装了多个 Python。操作系统升级通常会安装新的 Python,但不会有清除旧 Python 和破坏计算机上现有程序的风险。

出于这些原因,在我自己的计算机上,我总是安装特定版本,例如:python3.8 -m pip。当我编写 Makefile 或构建脚本以分发给其他人时,我默认使用 python3 -m pip,但让用户可以选择将 python3 替换为他们自己的解释器路径。