python打包项目pyinstaller的使用及问题解决

前言
在使用python编写了一个小程序之后,希望能够将其打包为一个可执行文件,如exe格式,这样就能够在其他电脑上安装使用,因此,打包python项目是一个普遍的需求。

配置

平台:windows10
工具:visual studio code
语言:python
库:pyinstaller
第三方工具:虚拟文件打包工具Enigma Virtual Box

一、pyinstaller 安装
pip install pyinstaller
二、pyinstaller 使用

pyinstaller最简单的用法就是:

pyinstaller xxx.py  

在你当前工作的项目根目录下,进入终端命令行,输入以上指令,其中xxx是你得python主项目名称。

正常情况下,pyinstaller此时会自动执行打包程序,但也可能会遇到错误:

The 'pathlib' package is an obsolete backport of a standard library package and is incompatible with PyInstaller. Please remove this package (located in E:\Program Files\Python312\Lib\site-packages) using
    "E:\Program Files\Python312\python.exe" -m pip uninstall pathlib
then try again.

这个错误表示,如果你安装了pathlib,你需要卸载它。

pip uninstall pathlib

等待卸载完成,再次使用pyinstaller命令即可。
当打包完成后,会在当前项目文件下生成两个文件夹:
在这里插入图片描述
一个是build,一个是dist,其中exe文件就在dist文件夹下:
在这里插入图片描述
正常情况下,此时如果点击exe文件,应该能直接启动程序。但有时会遇到问题,比如路径问题。
我们在编程时,有时会为了方便,对于程序里用到的其他资源文件如图片、文本或者配置性文件,直接使用了相对路径,但一旦打包之后,程序启动时的终端可能就完全不一样了,此时相对路径很可能就报错。
那么此时应该如何处理呢?
我们可以在编写程序时,对于涉及到的其他资源文件的路径,进行处理,比如:

if getattr(sys,'frozen',False):     
            path1=os.path.dirname(os.path.abspath(sys.executable))
        elif __file__:
            path1=os.path.dirname(os.path.abspath(__file__))
        #print(path1)
        self.path1=path1

注:这段代码来自网络,主要是处理程序的路径问题,目的是当程序位于不同的文件夹或者终端时,可以先获取自身的根路径,然后根据此路径来适配程序的其他资源文件的路径。

self.qss_style_file=self.path1+'\qssfile\qss_main_style.qss'

比如你有1个qss文件,那么就可以使用动态的根路径加上相对路径,这样,无论程序的路径是什么,qss文件的路径都可以适应。

最后,要说明的是,本文是个人在使用pyinstaller打包python项目为exe格式过程的一个记录,如果你正好有这样的问题,能帮到你更好,但主要是便于本人以后遇到类似问题,有一个参考记录。