conda虚拟环境下使用pyinstaller打包程序为exe文件全过程

 更新时间:2023年12月23日 08:32:36   作者:感谢地心引力  
pyinstaller是一个支持跨平台使用的第三方库,它可以将脚本执行所需的模块和库,自动分析、收集并生成一个文件夹或者可执行文件,这篇文章主要给大家介绍了关于conda虚拟环境下使用pyinstaller打包程序为exe文件的相关资料,需要的朋友可以参考下

一、为什么要用conda虚拟环境

第一点是,pyinstaller打包需要指定程序中使用的库的路径,新手在这一点上很容易出现问题,导致打包后的exe程序执行的时候显示缺少模块。这个问题可能并不能通过简单地指定路径来解决。

第二点就是使用虚拟环境本身的好处了:

  • 可以创建多个不同的Python环境,每个环境可以安装不同版本的Python和不同的包,避免了包之间的冲突和依赖问题。
  • 可以方便地切换和管理不同的Python环境,只需要使用activate和deactivate命令即可。
  • 可以使用conda命令来安装和更新包,不需要使用pip或其他工具。conda还可以安装一些非Python的包,比如gcc,nodejs,cuda等。
  • 可以使用conda-forge等第三方源来获取更多的包,或者使用自定义的源来安装私有的包。
  • 可以使用conda export和conda env create命令来导出和导入环境配置文件,方便在不同的机器上复制相同的环境。

当你进入一个conda虚拟环境后(conda activate xxx),可以使用conda installpip install安装不同的包,因为某些包可能在conda源中没有。

虚拟环境的创建和使用很简单,不是本文的主题,这里不赘述了。

二、pyinstaller用法

PyInstaller 是一个用于将 Python 程序打包成可执行文件的强大工具。它允许你将你的 Python 代码、依赖项和解释器一起打包成一个独立的可执行文件,无需用户安装 Python 或其他依赖项。

2.1 安装 PyInstaller

首先进入项目所在的虚拟环境:

打开Anaconda Powershell Prompt(为什么不直接用Powershell?可以,但不建议,你可以从我本专栏前面的文章找到答案),进入项目所在虚拟环境:

conda activate yt_dlp_env

安装pyinstaller:

conda install pyinstaller

现在,先看第三节:实际使用示例,然后再回来看第二节。

2.2 基本用法

打包一个 Python 脚本

假设你有一个名为 my_script.py 的 Python 脚本,想将其打包成可执行文件。你可以在命令行中执行以下命令:

pyinstaller my_script.py

这将在当前目录下创建一个 dist 文件夹,其中包含了可执行文件。你可以在 dist 文件夹中找到 my_script(或 my_script.exe,取决于你的操作系统)可执行文件。

2.21 打包一个 Python 项目

如果你的项目包含多个文件,你可以将整个项目目录作为参数传递给 PyInstaller。例如:

pyinstaller my_project_directory

这将在 dist 文件夹中创建一个可执行文件,其中包含了整个项目的所有文件和依赖项。

2.22 打包选项

PyInstaller 支持许多选项,以便你根据需要自定义打包过程。一些常用的选项包括:

  • 打包选项:

    • -F 或 --onefile生成单个可执行文件
    • -D 或 --onedir:生成一个包含多个文件的目录。
    • -w 或 --windowed:创建一个窗口应用程序,没有控制台窗口。
    • -c 或 --console:创建一个带有控制台窗口的命令行应用程序。
    • -m 或 --name:指定生成的可执行文件的名称。
    • --add-data:添加额外的数据文件到可执行文件中。
  • 导入选项:

    • -p 或 --paths添加搜索Python模块的路径
    • --hidden-import指定需要手动导入但不在源代码中明确导入的模块
  • 打包配置选项:

    • --name指定生成的可执行文件的名称
    • --icon指定可执行文件的图标文件
    • --version-file:指定版本信息文件。
    • --upx-dir:指定UPX可执行文件压缩工具的目录。
  • 调试选项:

    • --debug生成带有调试信息的可执行文件
  • 优化选项:

    • -O 或 --optimize:使用优化编译Python文件。
    • --noconfirm:禁用优化编译确认提示。
  • 其他选项:

    • -h 或 --help:显示帮助信息。
    • --clean:清理临时文件。
    • --noconfirm:在覆盖现有输出目录时不进行确认。
    • --noconsole:不显示控制台
    • --python指定python解释器的路径

这只是一些常用的PyInstaller参数,实际上有更多选项可用于更复杂的定制。你可以使用pyinstaller --help命令来查看完整的参数列表和说明。

例如,要生成一个单独的可执行文件并指定其名称,你可以使用以下命令:

pyinstaller -F -n my_app my_script.py

这将生成一个名为 my_app 的单独可执行文件。

2.3 打包依赖项

当使用PyInstaller来打包Python应用程序时,你可以使用一系列重要的选项来设置依赖项和配置生成的可执行文件。以下是一些关键的依赖设置选项:

  • --hidden-import:通过该选项,你可以指定需要手动导入但不在源代码中明确导入的模块。这对于确保PyInstaller能够识别和包含所有依赖项非常有用。
pyinstaller --hidden-import module_name script.py
  • --exclude-module:使用该选项可以排除特定模块,不包含在生成的可执行文件中。
pyinstaller --exclude-module module_name script.py
  • --add-binary:允许将外部二进制文件添加到生成的可执行文件中,这对于包含一些外部库非常有用。
pyinstaller --add-binary "path/to/binary;destination/folder" script.py
  • --add-data:类似于--add-binary,但用于添加外部数据文件到生成的可执行文件中。
pyinstaller --add-data "path/to/data;destination/folder" script.py
  • --paths:通过指定额外的模块搜索路径,可以确保PyInstaller能够找到依赖项的位置。
pyinstaller --paths path/to/modules script.py

你也可以手动👇👇

2.31 导出依赖项列表

你可以使用以下命令导出项目的依赖项列表:

pyinstaller --name=my_app --onefile my_script.py --path=/path/to/dependencies

这将创建一个 my_app.spec 文件,其中包含了项目的依赖项列表。

2.32 配置依赖项

编辑 my_app.spec 文件并添加依赖项的路径,如下所示:

# ...
a = Analysis(['my_script.py'],
             pathex=['/path/to/project'],
             binaries=[],
             datas=[],
             ...
             pathex=['/path/to/dependencies'],  # 添加依赖项路径
             ...
             )
# ...

然后,使用以下命令来根据修改后的 my_app.spec 文件打包项目:

pyinstaller my_app.spec

这将使用指定的依赖项路径打包项目。

2.4 自定义打包选项

如果你需要更多的自定义选项,可以编辑 my_app.spec 文件并进行更详细的配置。你可以设置各种选项,包括文件和目录的排除和包含、运行时选项等。详细信息可以在 PyInstaller 的官方文档中找到。

2.5 打包完成后的文件

成功打包后,你将在 dist 目录中找到生成的可执行文件。这个文件可以在没有安装 Python 解释器或其他依赖项的情况下在目标系统上运行。

2.6 注意事项

  • 打包大小:可执行文件的大小可能会比原始 Python 代码大很多,因为它包含了 Python 解释器和依赖项。你可以通过精简依赖项来减小可执行文件的大小。
  • 跨平台问题:PyInstaller 支持在不同的操作系统上打包应用程序,但需要在相应的操作系统上运行 PyInstaller。

三、打包示例

打包如下程序:

(1)打开Anaconda Powershell Prompt,进入项目所在虚拟环境:

conda activate yt_dlp_env

(2)进入程序所在目录:

cd D:\Python_Study\VideoDownload

(3)打包:

pyinstaller -F --paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages --python=E:\anaconda3\envs\yt_dlp_env\python.exe    --icon=wx2.ico --name=Downloader DLP_GUI_Perfect.py

参数说明:

  • -F:打包成一个可执行文件;
  • -- path:指定python模块的搜索路径;
  • --python:指定python解释器路径;
  • --icon:可执行文件的图标
  • --name:可执行文件名称

(3)在文件所在目录,打开dist文件夹,即可看到打包好的exe文件;

(4)直接打开即可运行,发送给别人也是如此(跨平台应该不行)。

打包好的exe程序运行时是会打开一个控制台窗口的,有时候是不需要的,比如你是一个GUI的程序。

在使用PyInstaller打包时,你可以使用--noconsole选项来告诉PyInstaller生成一个窗口应用程序而不是控制台应用程序:

pyinstaller -F --paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages --python=E:\anaconda3\envs\yt_dlp_env\python.exe  --noconsole  --icon=wx2.ico --name=Downloader DLP_GUI_Perfect.py

但不建议第一次就这样打包,留着控制台,可以查看程序运行报错情况,因为依赖很多的情况下,可能存在依赖没完全指定的情况。

除了依赖问题,还有pyinstaller本身的问题,打包后,可能会改变一些程序的运行逻辑或者某个过程的编码、或者资源访问方式等等。不仅需要注意打包参数的设置,可能还需要修改源代码

因此,需要多次调试才能打包好一个程序(复杂一些的),可以使用--debug参数打包,进行调试。

总结

到此这篇关于conda虚拟环境下使用pyinstaller打包程序为exe文件的文章就介绍到这了,更多相关conda虚拟环境pyinstaller打包exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中使用Boolean操作符做真值测试实例

    Python中使用Boolean操作符做真值测试实例

    这篇文章主要介绍了Python中使用Boolean操作符做真值测试实例,在Python中,任何类型的对象都可以做真值测试,并且保证返回True或者False,需要的朋友可以参考下
    2015-01-01
  • 如何利用Python和OpenCV对图像进行加水印详解

    如何利用Python和OpenCV对图像进行加水印详解

    Python使用opencv是因为觉得它足够强大,很多图像处理这块都是用的它,最近就用opencv添加个水印,这篇文章主要给大家介绍了关于如何利用Python和OpenCV对图像进行加水印的相关资料,需要的朋友可以参考下
    2021-10-10
  • 超详细注释之OpenCV构建透明的叠加层

    超详细注释之OpenCV构建透明的叠加层

    这篇文章主要介绍了OpenCV构建透明的叠加层,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 基于Python+Flask实现一个简易网页验证码登录系统案例

    基于Python+Flask实现一个简易网页验证码登录系统案例

    当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术,验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户,本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系统
    2023-09-09
  • Python SQLAlchemy与数据库交互操作完整指南

    Python SQLAlchemy与数据库交互操作完整指南

    SQLAlchemy 是一个强大的 Python 库,用于数据库操作,无论是简单的数据存储还是复杂的数据管理,SQLAlchemy 都提供了多种方法来处理数据库,本文将全面介绍 SQLAlchemy的基本用法以及各种操作的示例代码
    2024-01-01
  • Python基于回溯法子集树模板解决选排问题示例

    Python基于回溯法子集树模板解决选排问题示例

    这篇文章主要介绍了Python基于回溯法子集树模板解决选排问题,简单描述了选排问题并结合实例形式分析了Python使用回溯法子集树模板解决选排问题的具体实现步骤与相关操作注意事项,需要的朋友可以参考下
    2017-09-09
  • 基于Python实现打哈欠检测详解

    基于Python实现打哈欠检测详解

    这篇文章主要介绍了如何利用Python+OpenCV实现人打哈欠检测,文中的示例代码讲解详细,对我们学习Python有一定帮助,感兴趣的可以了解一下
    2022-04-04
  • python-视频分帧&多帧合成视频实例

    python-视频分帧&多帧合成视频实例

    今天小编就为大家分享一篇python-视频分帧&多帧合成视频实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python自定义一个异常类的方法

    Python自定义一个异常类的方法

    在本篇文章里小编给大家分享了关于Python自定义一个异常类的详细步骤和实例代码,有兴趣的朋友们参考学习下。
    2019-06-06
  • 零基础小白多久能学会python

    零基础小白多久能学会python

    在本篇文章里小编给大家分享的是一篇关于零基础学python要多久的相关文章内容,有兴趣的朋友们可以跟着学习下。
    2020-06-06

最新评论