【问题标题】:python3 -m pip install VS pip3 installpython3 -m pip install VS pip3 install
【发布时间】:2020-03-20 23:15:20
【问题描述】:

我总是使用pip install(我认为它相当于pip3 install,因为我的环境中只有python3)来安装软件包。但我最近听说python3 -m pip install 更好。为什么?

【问题讨论】:

标签: python python-3.x pip


【解决方案1】:

我建议不要直接调用任何pip somecommand(或pip3)脚本。相反,为特定的 Python 解释器显式调用 pip 的可执行模块要安全得多,形式为 path/to/pythonX.Y -m pip somecommand

这样做有很多好处,例如:

  • 明确了项目将为哪个 Python 解释器pip 安装(Python 2 或 3,是否在虚拟环境中,等等)
  • 对于虚拟环境,可以pip-install(或执行其他操作)而不激活它:path/to/venv/bin/python -m pip install SomeProject
  • 在 Windows 下,这是唯一安全升级 pip 自身的方法path\to\venv\Scripts\python.exe -m pip install --upgrade pip

但是是的,如果一切都完美设置,那么python3 -m pip install SomeProjectpip3 install SomeProject 应该做同样的事情,但是有太多的情况是设置存在问题并且事情没有按预期工作并且用户会感到困惑(正如该平台上有关此主题的许多问题所示)。

参考文献

【讨论】:

  • 是否可以断定在mac/unix系统上,如果在一个env中只安装了一个版本的python,那么使用pip install是安全的?
  • 同样的规则适用。它应该是安全的,但总有一些情况会出现某种问题并且事情没有按预期工作。可能是环境未正确激活,pipshebang 已损坏等。最后pip 脚本只是一个快捷方式,因此在交互式上下文中(例如在命令行上),用户可以事先检查设置是否正确并监控输出并注意潜在的不一致,这是安全的。在其他情况下(bash 脚本、tox 配置等)最好明确并使用扩展版本。
  • 我想,你的SomeProjects 应该是SomePackage
  • @muyustan 我使用这个术语是为了避免混淆分发包导入包。这两个都不是应该给 pip 什么的正确术语。 SomeProject 是一个发布在 PyPI 上的项目。它可能有多个版本。每个发布的版本可能有多个发行版(sdistwheel)。每个发行版可能包含多个可导入的顶级模块或包。 -- packaging.python.org/glossary/#term-distribution-package -- 我试图(很差地)在这里总结一下:sinoroc.gitlab.io/kb/python/packaging.html
  • @Chris 是的,一些例子不会有什么坏处。在这种情况下,setuptools project 浮现在脑海中。它有 2 个顶级包setuptoolspkg_resources(显然还有1 个顶级模块easy_install)。
【解决方案2】:

这是一样的。

python3 -m pip install在python中调用pip作为模块,而pip install直接调用pip。

首选第一个的唯一原因是,为了使用第二个,您需要在环境变量中设置pip(对于 Windows)。在旧版本的 python 中,这不是在安装过程中自动完成的,而是您必须手动完成。这就是为什么在许多指南中,您可能会看到他们使用第一种语法作为他们的指令(因为它总是有效的,只要您的环境变量中有 python3。对于 Linux/Mac 操作系统没有任何区别。

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2015-06-01
    • 2016-04-15
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多