我正在尝试使用pip和python3安装一些软件包。我正在使用MacOS,所以默认情况下,当我运行pip时,它使用的是我的Python 2版本。
我可以使用:
在python 3中安装软件包$ pip3 install package_name
然而,我能够做到(至少看起来):
$ python3 -m pip install package_name
我想知道pip3
和python3 -m pip
是否具有相同的效果。
答案 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所说,pip3
和python3 -m pip
应该相同。至少有一个例外:如果它们不在同一路径中。我有以下设置:
$ which pip3
/usr/bin/pip3
$ which python3
/home/username/anaconda3/bin/python3
使用pip3安装模块并使用pip3 freeze
进行验证后,运行python3 my_script.py
或python3 -c 'import my_module'
时无法访问它们。我遇到了ModuleNotFound
错误。
答案 2 :(得分:0)
其他答案在技术上是正确的,但对于为什么有点不清楚 Python 同时具有 pip3
和 python3 -m pip
:
如果您的机器上安装了多个 Python,则使用 pip3
全局安装软件包可能不明确。
许多人在升级计算机的操作系统后最终安装了多个 Python。操作系统升级通常会安装新的 Python,但不会有清除旧 Python 和破坏计算机上现有程序的风险。
出于这些原因,在我自己的计算机上,我总是安装特定版本,例如:python3.8 -m pip
。当我编写 Makefile 或构建脚本以分发给其他人时,我默认使用 python3 -m pip
,但让用户可以选择将 python3
替换为他们自己的解释器路径。