用 auto-py-to-exe 将 python 代码打包为exe可执行文件过程中的遇到的问题及解决方案

用 auto-py-to-exe 将 python 代码打包为exe可执行文件过程中的遇到的问题及解决方案

1. 安装过程中,提示 No module named ‘fcntl’ 的错误

尝试了直接用 pip install auto-py-to-exe 进行安装,也尝试了从GitHub下载,再安装的方式,都存在同样的错误提示,经过多次的尝试,最后找到了有效的解决方案,详见作者页面中的内容:

  1. Python的Windows兼容问题——ModuleNotFoundError: No module named ‘fcntl’
  2. ImportError: No module named fcntl

安装完成后,便可以通过在cmd控制窗口中输入:auto-py-to-exe 运行该程序。

2. 将附件文件一起打包进Exe文件中时,需要在代码中明确相对路径,否则会出现exe程序运行时无法定位到附件图片的情况

关于auto-py-to-exe如何对python进行打包的文章有很多,我也是参照了Anubhav Chaturvedi, How to Create an EXE Executable on Windows from Your Python Code 以及 几度夕晖 的 Auto-Py-to-Exe完美打包python程序的文章,受益良多,该工具的界面如下:
在这里插入图片描述

这里主要讲一下,在添加图片附件过程中遇到的相对路径定位问题。附加文件可以通过点击添加文件,或者添加目录进行添加,如下图所示:
添加附件说明

  1. 序号1,是添加的目录,左侧表示本地的目录,右侧则是程序运行后,创建的临时目录中的相对目录。
  2. 序号2,是添加的图片文件,右侧的./images/ 则表示在程序运行后,该文件会释放到临时目录下的 images/目录下,在原python 脚本中,需要调用该图片的相对路径,就是images/Logo.png
  3. 序号3,是添加的另外一个图片文件,右侧的 . 表示将该文件释放到临时目录下。

以下内容是在python代码中,需要调整的文件调用地址的说明

# 使用auto-py-to-exe 打包成exe文件时,添加文件时路径参考
# 参考来源:https://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile/7675014#7675014
# 本函数代码来源于auto-py-to-exe的说明文档,
# 作用是将代码中的相对路径转换成exe文件运行时生成的临时目录所在位置的绝对路径。
"""
如果临时目录为:C:\Users\AA\AppData\Local\Temp\_MEI201642, 则:
 - 序号1中的附加目录dist/的路径则为:C:\Users\AA\AppData\Local\Temp\_MEI201642\dist\;
 - 序号2中的附加文件Logo.png的路径则为:C:\Users\AA\AppData\Local\Temp\_MEI201642\images\Logo.png;
 - 序号3中的附加文件Logo.png的路径则为:C:\Users\AA\AppData\Local\Temp\_MEI201642\Logo.png;
"""

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 对应序号1,添加的目录的路径, 在代码中要明确目录中的具体文件名,比如 filename.xxx:
dist_path = resource_path("dist\filename.xxx")

# 对应序号2,添加到images目录中的Logo.png图片的路径
logo_path_1 = resource_path("images\Logo.png")

# 对应序号3,添加到临时根目录中的Logo.png图片的路径
logo_path_2 = resource_path("Logo.png")

以上就是在使用auto-py-to-exe 将python打包为exe可执行文件过程中的遇到的问题及解决方案,如有不足之处,请指正。

Auto py to exe 打包速度非常快,效率很高,操作简便,推荐尝试使用。在此感谢 Myisking、 九月朦胧、 Anubhav Chaturvedi、 几度夕晖 分享的文章,让我们少走很多弯路,谢谢!

日期:2022年10月

Reference

[1].ico图标转换工具

猜你喜欢

转载自blog.csdn.net/lemiaokai/article/details/127174244