py文件打包 exe时遇到的路径问题

(本文部分引用自https://www.cnblogs.com/technicianafei/p/16068438.html)

路径“冻结”

​ pyinstaller 打包py文件成exe文件,在没有python的机器上运行,执行打包后的程序,经常会出现程序使用的图标无法显示,程序使用的关联文件无法关联。或者,在打包的本机上运行正常,但是将打包后的程序放到其它机器上就有问题。这些现象都很有可能是由程序使用的文件路径发生改变产生的,因此在打包时候我们需要根据执行路径进行路径“冻结”

 

文件路径:

    绝对路径:从整个硬盘出发开始表述的路径,例如:C/D/E:/***/***/...

    相对路径:从当前编辑文件出发表述的路径,不同语言表示方法有差异,例如:./***/***,或../***/***/...

 

打包exe发布过程中路径出现问题的原因主要有:

  1.文件路径使用了绝对路径,本地没问题,其他机器基本不可能没问题。需使用frozen 方法解决。

  ​ (在python代码中使用绝对路径调用外部文件可以保证打包时候路径可追溯,因此在本机上运行打包后程序基本没问题。但是当本机上对应路径的资源文件被改变,或者将打包程序应用到别的机器,都会出现搜索不到资源文件的问题。这种方式不是合适的打包发布python软件的方式。)

  2.打包后dist文件夹内没有文件,属于格式错误,dist内加入相应文件就可解决。

  3.exe文件存放路径包含了desktop, 需更改exe存放位置。

 

以下是整个的大概解决过程:

  打包命令:

    pyinstaller -F -w -i 图标名.ico 文件名.py

 

  frozen 方法:

  新建一个frozen_dir.py文件



    import os, sys

    def app_path():
     """Returns the base application path."""
     if hasattr(sys, 'frozen'):
     # Handles PyInstaller
    return os.path.dirname(sys.executable)
    return os.path.dirname(__file__)

  然后再主文件中,引用frozen_dir模块创建相对路径
  例如:file_path= frozen_dir.app_path() + r'/1.ico'
  

​ 其中的app_path()函数返回一个程序的执行路径,为了方便我们将此文件放在项目文件的根目录,通过这种方式建立了相对路径的关系。

​ 源代码中使用路径时,会以app_path()的返回值作为基准路径,其它路径都是其相对路径。以本文中使用的python项目打包为例,如下所示: test.py

 

 

(frozen 文件)

 

使用 frozen 方法,本地py文件运行成功

 

 

第一次错误:py文件根目录下没有图标文件,打包失败

 

加入后打包成功

 

第二次错误:本地dist文件夹没有图标文件,exe运行失败

 

本地dist文件夹加入图标文件,exe运行成功

 第三次错误:其他电脑exe路径含桌面运行失败

 其他电脑exe路径不含桌面运行成功

 

 

文件树:

file/dist/img/***

file/dist/*.exe

ffile/build/***

file/*.espc

posted @ 2022-08-14 15:18  因缘际合  阅读(2514)  评论(0编辑  收藏  举报