pip3和python3 -m pip之间的区别

lmi*_*asf 9 python pip python-3.x

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

我已经能够使用以下命令在python 3中安装包:

$ pip3 install package_name
Run Code Online (Sandbox Code Playgroud)

但是,我能够做到这一点(至少看起来像):

$ python3 -m pip install package_name
Run Code Online (Sandbox Code Playgroud)

我不知道是否pip3python3 -m pip有同样的效果.

Jam*_*hra 11

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

如果您的计算机上安装了多个 Python,则使用pip3全局安装包可能会不明确。

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

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


tih*_*hom 9

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

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())
Run Code Online (Sandbox Code Playgroud)

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

# pip/__init__.py
if __name__ == '__main__':
    sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

它们都运行相同的main()功能

  • 除非有一些奇怪的设置。pip3和python3的路径应该是相同的bin文件夹。在这种情况下,他们将调用相同的`pip`模块。 (2认同)

cra*_*raq 8

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

$ which pip3
/usr/bin/pip3
$ which python3
/home/username/anaconda3/bin/python3
Run Code Online (Sandbox Code Playgroud)

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