我有Python 3.4.1的本地版本,可以运行python -m pip install
,但是找不到运行pip install
的pip二进制文件。两者有什么区别?
最佳答案
2014年
他们做的完全一样。实际上,分发Python模块的文档是just updated,建议使用python -m pip
而不是pip
可执行文件,因为这样可以更轻松地确定将使用哪个版本的python实际运行pip
。
除了相信我的话和我链接的错误报告之外,还有一些更具体的“证明” :)
如果您看一下pip
可执行脚本,它就是这样做的:
from pkg_resources import load_entry_point
<snip>
load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
它调用
load_entry_point
,该函数返回一个函数,然后执行该函数。它使用的入口点称为'console_scripts'
。如果查看pip
的entry_points.txt文件(在我的Ubuntu机器上为/usr/lib/python2.7/dist-packages/pip-1.5.4.egg-info/entry_points.txt),则会看到以下内容:[console_scripts]
pip = pip:main
pip2.7 = pip:main
pip2 = pip:main
因此,返回的入口点是
main
模块中的pip
函数。运行
python -m pip
时,您正在执行__main__.py
包中的pip
脚本。看起来像这样:import sys
from .runner import run
if __name__ == '__main__':
exit = run()
if exit:
sys.exit(exit)
runner.run
函数如下所示:def run():
base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
## FIXME: this is kind of crude; if we could create a fake pip
## module, then exec into it and update pip.__path__ properly, we
## wouldn't have to update sys.path:
sys.path.insert(0, base)
import pip
return pip.main()
如您所见,它也只是调用
pip.main
函数。因此,这两个命令最终都会在main
中调用相同的pip/__init__.py
函数。关于python - “pip install”和 “python -m pip install”有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25749621/