conda install vs pip install

news2024/9/20 11:13:44

1背景

最近使用pyinstaller打包python程序,启动程序的时候,发现了以下的报错信息

Failed to execute script "pyi_rth_pkgres" due to unhandled dll load failed while importing pyexpat

后面查阅了相关文档,比如根据stackoverflow的文章
重装了很多次pyinstaller。还是不行,后面只能乖乖去查询打包日志,发现了一连串的警告:

111781 WARNING: Library not found: could not resolve 'libcrypto-3-x64.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_hashlib.pyd'.
111781 WARNING: Library not found: could not resolve 'liblzma.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_lzma.pyd'.
111781 WARNING: Library not found: could not resolve 'LIBBZ2.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_bz2.pyd'.
111781 WARNING: Library not found: could not resolve 'libcrypto-3-x64.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_ssl.pyd'.
111781 WARNING: Library not found: could not resolve 'libssl-3-x64.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_ssl.pyd'.
111781 WARNING: Library not found: could not resolve 'ffi.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_ctypes.pyd'.
111781 WARNING: Library not found: could not resolve 'libexpat.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\pyexpat.pyd'.
111781 WARNING: Library not found: could not resolve 'zstd.dll', dependency of 'D:\\programs\\miniconda3\\Lib\\site-packages\\zstandard\\backend_c.cp312-win_amd64.pyd'.
111781 WARNING: Library not found: could not resolve 'libcrypto-3-x64.dll', dependency of 'D:\\programs\\miniconda3\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\_rust.cp312-win_amd64.pyd'.
111781 WARNING: Library not found: could not resolve 'libssl-3-x64.dll', dependency of 'D:\\programs\\miniconda3\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\_rust.cp312-win_amd64.pyd'.
111781 WARNING: Library not found: could not resolve 'sqlite3.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_sqlite3.pyd'.
111781 WARNING: Library not found: could not resolve 'tcl86t.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_tkinter.pyd'.
111781 WARNING: Library not found: could not resolve 'tk86t.dll', dependency of 'D:\\programs\\miniconda3\\DLLs\\_tkinter.pyd'.

2混沌时期

此时心中有很多疑问,主要还是以下2个:
(1)如果缺少dll,按理说本地源码也无法启动,但是本地是完美运行起来
(2)如果是因为缺少包没有安装,pip install都已经执行过,本地源码方式确实可以启动。
通过大量资料查询,也没发现任何的问题。此时最快的方法就是换一台电脑进行打包,发现另外一台电脑是可以打包出来,而且可以拷贝到其他电脑运行。
对比了这两台电脑不同之处,就是一台电脑使用conda环境下进行打包,另外一台电脑则不是。

3 发现根因

通过bing chat的帮助下,使用以下命令去提问

conda environment pyinstaller Library not found: could not resolve 'libexpat.dll',

相对之前搜索方式,增加了限定词。后面bing chat给出了更加详细的解决方案。

When using PyInstaller within a Conda environment, encountering the “Library not found: could not resolve ‘libexpat.dll’” error can be particularly tricky. Here are some steps to help you resolve this issue:

  1. Ensure Expat is Installed in Conda Environment:
    Make sure the expat library is installed in your Conda environment:

    conda install expat
    
  2. Check Environment Variables:
    Ensure that the Conda environment’s library paths are correctly set. You can activate your Conda environment and then check the paths:

    conda activate your_env_name
    echo %PATH%  # On Windows
    echo $LD_LIBRARY_PATH  # On Unix-like systems
    
  3. Manually Include DLL:
    If the library is still not found, you can manually include the libexpat.dll in your PyInstaller build. Locate the libexpat.dll file within your Conda environment (usually found in envs/your_env_name/Library/bin on Windows) and copy it to the same directory as your script or specify it in the .spec file:

    a = Analysis(['your_script.py'],
                 binaries=[('path/to/libexpat.dll', '.')],
                 ...)
    
  4. Use PyInstaller Hooks:
    Create a custom hook to ensure PyInstaller includes the libexpat dependency:

    # hook-libexpat.py
    from PyInstaller.utils.hooks import collect_dynamic_libs
    binaries = collect_dynamic_libs('libexpat')
    
  5. Rebuild the Executable:
    After making these changes, try rebuilding your executable:

    pyinstaller your_script.py
    
  6. Check Conda Compatibility:
    Ensure that the versions of PyInstaller and Conda are compatible. Sometimes, updating or downgrading PyInstaller within the Conda environment can resolve such issues:

    conda update pyinstaller
    

These steps should help you resolve the issue with libexpat.dll in your Conda environment. If you encounter any specific errors during these steps, feel free to share them, and I can assist further!

以上均是bingchat的回答,很明显,我少了conda install的方法,后面用bing chat的建议,将所有warn的library用conda install安转了一遍,重新打包,发现了打包后的程序可以启动。
在这里插入图片描述
在这里插入图片描述

4 思考

conda install 到底与之前用pip install有什么区别。
一、安装源不同;
二、支持语言范围不同;
三、安装思路不同;
四、软件包数量不同;
五、包存储的位置不同。

一 源不同

pip 从PyPI(Python Package Index)上拉取数据。上面的数据更新更及时,涵盖的内容也更加全面
conda 从 Anaconda.org 上拉取数据。虽然Anaconda上有一些主流Python包,但在数量级上明显少于PyPI,缺少一些小众的包

支持语言不同

pip 是 python 官方推荐的包下载工具,但是只能安装python包
conda 是一个跨平台(支持linux, mac, win)的通用包和环境管理器,它除了支持python外,还能安装各种其他语言的包,例如 C/C++, R语言等。

三 安装思路不同

pip 里的软件包为wheel版或源代码发行版。wheel属于已编译发新版的一种,下载好后可以直接使用;而源代码发行版必须要经过编译生成可执行程序后才能使用,编译的过程是在用户的机子上进行的
conda 里的软件包都是二进制文件,下载后即可使用,不需要经过编译。

在解析依赖关系方面,pip和conda也有不同的方式。pip主要依赖于Python的包管理工具,它会解析软件包的依赖并尝试自动安装所需的依赖项。但是,由于Python软件包的依赖关系可能复杂且不一致,使用pip安装一些软件包时可能会遇到依赖问题。而conda则使用了更复杂的依赖解析算法,能够解决依赖关系冲突的问题,并确保所安装的软件包能够兼容。

pip安装包时,尽管也对当前包的依赖做检查,但是并不保证当前环境的所有包的所有依赖关系都同时满足。当某个环境所安装的包越来越多,产生冲突的可能性就越来越大。
conda会检查当前环境下所有包之间的依赖关系,保证当前环境里的所有包的所有依赖都会被满足

四 软件包数量

安装源不同在于,pip install使用PyPI作为安装源,而conda install使用Anaconda存储库作为安装源。
由于使用不同的软件源,pip和conda提供的软件包数量也有所不同。就python的包数量来说,PyPI是Python社区的主要存储库,拥有数量庞大的软件包。因此,pip可以访问到数量众多的软件包和工具。而conda则专注于科学计算和数据科学领域,其存储库中包含了许多常用的科学计算库和工具,但总体软件包数量可能相对较少。

五 包的储存位置:

在conda虚拟环境下使用 pip install 安装的库: 如果使用系统的的python,则库会被保存在 ~/.local/lib/python3.x/site-packages 文件夹中;如果使用的是conda内置的python,则会被保存到 anaconda3/envs/current_env/lib/site-packages中
conda install 安装的库都会放在anaconda3/pkgs目录下。这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载

5 使用总结

建议在创建和管理环境时尽可能使用conda,并使用conda的环境管理功能来管理软件包和依赖项。不行再使用pip安装。

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

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

相关文章

Vue3+Ts封装下拉懒加载自定义指令

文件夹目录如下: 使用方式: <template><divclass="time-line"v-infinite-scroll="{loadMore: loadMoreItems,threshold: 100 // 当滚动到距离底部 100 像素时触发加载}"> </div> </template><script lang="ts" se…

7次多项式对若干个点进行拟合,并生成图像|MATLAB实现

文章目录 拟合运行结果完整代码拟合 MATLAB对数据进行拟合的意义是通过数学模型和统计方法对实际数据进行分析和预测。拟合可以帮助我们理解数据背后的规律和趋势,从而做出科学决策。 拟合的意义 揭示数据的规律 预测未来趋势 数据修正和异常检测 数据分析和模型验证 总之,…

Prometheus+Grafana保姆笔记(2)——监控Spring Boot微服务程序

Prometheus Grafana 的组合在微服务项目中可以完成许多DevOps任务&#xff0c;它们共同提供了强大的监控和可视化功能。 我们陆续介绍Prometheus Grafana 的相关用法。 上一期&#xff0c;我们介绍了PrometheusGrafana的安装&#xff0c; PrometheusGrafana保姆笔记&#…

javaFx桌面程序开发代码示例

程序效果&#xff1a; 弹窗内容&#xff1a; 1.启动类 HelloJavaFX&#xff1a; import javafx.application.Application; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene…

赵本山:你把这玩意借我带上,黄晓娟:驴蒙脸你要带这个?--小品《麻将豆腐》(中3)的台词与解说

赵本山&#xff1a;你把这玩意借我带上&#xff0c;黄晓娟&#xff1a;驴蒙脸你要带这个&#xff1f; --小品《麻将豆腐》&#xff08;中3&#xff09;的台词与解说 &#xff08;接上&#xff09; 黄晓娟&#xff08;饰演小姨子&#xff09;&#xff1a;忘了麻将 赵本山&…

车载客流计数器在公交系统中的应用

车载客流计数器在公交系统中的应用&#xff0c;已成为提升运营效率与服务质量的关键工具。随着大数据概念的深入人心&#xff0c;人们愈发认识到数据在决策中的核心地位。公交车客流统计的引入&#xff0c;正是基于这一认识&#xff0c;旨在为公交车辆的运营组织提供详实、精准…

MySQL:表的设计原则和聚合函数

所属专栏&#xff1a;MySQL学习 &#x1f48e;1. 表的设计原则 1. 从需求中找到类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性对应着表中的字段 2. 确定类与类的对应关系 3. 使用SQL去创建具体的表 范式&#xff1…

【Linux多线程】线程同步 与 生产者消费者模型(无锁化模型)

文章目录 1. Linux线程同步1.1 条件变量1.2 同步概念与竞态条件1.3 条件变量函数示例代码1:示例代码2 1.4 为什么 pthread_ cond_ wait 需要互斥量1.5 条件变量使用规范 2. 生产者消费者模型3. 读者 写者 问题3.1 读写锁3.2 读写锁的相关接口 4. 扩展&#xff1a;无锁化模型4.1…

Python 如何创建和解析 XML 文件

XML&#xff08;可扩展标记语言&#xff09;是一种广泛使用的标记语言&#xff0c;主要用于存储和传输数据。它具有结构化、层次化的特点&#xff0c;常被用作数据交换格式。Python 提供了多种工具和库来处理 XML 文件&#xff0c;包括创建、解析和操作 XML 文档。 一、XML 简…

免费webp转jpeg或gif工具

1、”“添加webp文件&#xff1b;”-“移除webp文件&#xff1b;”>>“开始转换&#xff1b;”X“清空内容。 也可以把想要转换的文件全选&#xff0c;拖进窗口里。 2、默认将webp文件转换成同名的png文件放在原来的文件夹里。如果不是静态图片&#xff0c;则自动尝试转…

案例:ZooKeeper + Kafka消息队列集群部署

目录 消息队列 概念 使用场景 不适宜 适宜 消息队列的特征 存储 异步 异步的优点 同步 为什么需要消息队列 解耦 作用 冗余 扩展性 灵活性 峰值处理能力 可恢复性 顺序保证 Kafka 概念 Kafka技术名词 &#xff08;1&#xff09;Broker &#xff08;2&a…

基于Orangepi全志H616智能视觉垃圾分类系统

目录 一、功能需求 二、Python的安装和环境搭建 三、Python基础 3.1 Python的特点&#xff1a; 3.2 Python的基础学习&#xff1a; 3.3 字典的多层嵌套&#xff1a; 四、C语言调用Python 4.1 搭建编译环境&#xff1a; 4.2 C语言执行Python语句&#xff1a; 4.3 C语言…

22 注意力机制—Transformer

目录 TransformerTransformer 架构对比 seq2seq多头注意力(Multi-head attention)带掩码的多头注意力(Masked Multi-head attention)基于位置的前馈网络(Positionwise FFN)残差连接和归一化(Add & norm)(加 & 规范化)1、加入归一化能够更好地训练比较深的网络…

UE基础 —— 项目与模板

虚幻引擎 项目 包含游戏和应用程序的所有内容&#xff0c;并将所有内容联系在一起&#xff1b;包含磁盘上的许多文件夹和资产&#xff0c;如蓝图、材质、3D资产、动画等&#xff1b;内容浏览器与磁盘上的文件夹和文件夹结构相同&#xff1b; 每个项目都有与之关联的.uproject文…

性能优化理论篇 | 彻底弄懂系统平均负载

Linux 上的进程状态 要讨论系统平均负载&#xff0c;首先要了解Linux 上的进程状态。 标志名称内核名称及解释R运行中或可运行TASK_RUNNING。进程正在执行或等待执行。可以在用户空间&#xff08;用户代码&#xff09;或内核空间&#xff08;内核代码&#xff09;中运行。S可…

【项目】基于Vue3.2+ElementUI Plus+Vite 通用后台管理系统

构建项目 环境配置 全局安装vue脚手架 npm install -g vue/cli-init打开脚手架图形化界面 vue ui创建项目 在图形化界面创建项目根据要求填写项目相关信息选择手动配置勾选配置项目选择配置项目然后我们就搭建完成啦&#x1f973;&#xff0c;构建可能需要一点时间&#xff0…

Navicat Premium Lite For Linux,一款免费的专业可视化 SQL 数据库设计工具,支持各种数据库并行连接,在业界可是大名鼎鼎!

Navicat Premium Lite For Linux&#xff0c;一款免费的专业可视化 SQL 数据库设计工具&#xff0c;支持各种数据库并行连接&#xff0c;在业界可是大名鼎鼎&#xff01; Navicat 是一个可视化数据库、数据表设计软件&#xff0c;支持MySQL、MariaDB、SQLite、MongoDB、Redshi…

论文阅读笔记:ST-MetaNet-1

目录 前言 摘要 CCS 关键词 介绍 时空相关性的复杂组合 空间相关性 时间相关性 时空相关性的多样性 本篇博客结语 前言 读这篇论文边读边学&#xff0c;每天坚持发博客&#xff0c;看到哪学到哪&#xff0c;这系列文章既有翻译&#xff0c;又有深度详细解释&#xff…

Rust学习笔记1--下载安装和使用

一、下载和安装&#xff1a; 官网&#xff1a;https://www.rust-lang.org/ 直接下载即可&#xff0c;windows&#xff1a;按照教程执行步骤。 二、使用&#xff1a; 2.1 在vscode中安装rust 2.2 编译与运行rust文件&#xff1a; 后缀名rs&#xff1a; 编译&#xff1a; …

org.springframework.boot.autoconfigure.AutoConfiguration.imports 配置没有生效

在spring3.x以后&#xff0c;自动配置需要配置在org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中 如果你配置了却没生效&#xff0c;有可能是创建的目录不对&#xff0c;正常情况下, META-INF.spring 是一个两层目录&#xff0c;如果是从别的地方复制…