Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pip3和python3-m pip之间的差异_Python_Python 3.x_Pip - Fatal编程技术网

pip3和python3-m pip之间的差异

pip3和python3-m pip之间的差异,python,python-3.x,pip,Python,Python 3.x,Pip,我正在尝试使用pip和python3安装一些软件包。我使用的是MacOS,所以在默认情况下,当我运行pip时,它使用的是我的Python2版本 我已经能够使用以下方法在python 3中安装一个软件包: $ pip3 install package_name 然而,我可以通过(至少看起来是这样)做到这一点: 我想知道pip3和python3-mpip是否有同样的效果。它们是一样的。如果查看bin文件夹中的pip3文件,它将从pip模块调用main函数 pip3安装包\u name在bin文件夹

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

我已经能够使用以下方法在python 3中安装一个软件包:

$ pip3 install package_name
然而,我可以通过(至少看起来是这样)做到这一点:


我想知道
pip3
python3-mpip
是否有同样的效果。

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

pip3安装包\u 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安装包\u name
运行模块的
\uuuu init\uuuuuuuuuuuuuuuuupy
文件


它们都运行相同的
main()
函数,正如@tihorn所说,
pip3
python3-m pip
应该是相同的。至少有一个例外:如果它们不在同一路径中。我有以下设置:

$哪个pip3
/usr/bin/pip3
$3哪条蟒蛇
/home/username/anaconda3/bin/python3

在使用pip3安装模块并使用
pip3 freeze
进行验证后,在运行
python3 my_script.py
python3-c“导入我的_模块”时,我无法访问它们。我发现一个
ModuleNotFound
错误。

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

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

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


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

不是Python特有的,而是。。。您的shell可能会有不同的行为,因为它正在查找两个不同的名称。有时,新软件安装在
/usr/local/
或更奇怪的地方,对典型的
$PATH
或文件系统层次结构的唯一让步是手工制作的符号链接,如
/usr/bin/python3->/opt/experimental/python3.2-local-myedit/bin/python
。通常在这些设置中,只有“星”二进制文件(如
python
perl
)被符号链接,而从相关二进制文件(如
pip
)到手动页面的所有其他文件都会将用户发送到操作系统安装介质上的任何文件。个人脚本、shell函数和别名也会出现类似错误。示例:在运行
python
之前寻找一些配置文件,但不是
pip
。谢谢,我知道如何查看
pip3
的代码(
$less/usr/local/bin/pip3
),但是你怎么知道
python3-m pip安装使用的代码…
正如Kevin J.Chase所建议的那样,shell可能正在查找两个不同的名称。有没有办法确保你所说的?我的意思是如何知道使用
$python3-m pip install执行的代码…
python3-m模块
将运行模块的
\uuu init\uuuuuuu.py
文件。请参阅此了解更多详细解释,以避免出现一些奇怪的设置。
pip3
python3
的路径应该是相同的
bin
文件夹。在这种情况下,他们会调用相同的
pip
模块。@tihorn谢谢你的提示,我刚刚被其中一个“奇怪的设置”咬了一口。pip3的路径是
/usr/bin/pip3
,python3的路径是
~/anaconda3/bin/python3
。我用pip3安装软件包,然后python3告诉我
ModuleNotFound
# 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())
# pip/__init__.py
if __name__ == '__main__':
    sys.exit(main())