鱼C论坛

 找回密码
 立即注册
查看: 1812|回复: 4

[已解决]请问下Python项目打包为exe

[复制链接]
发表于 2021-8-25 08:58:32 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 四君子 于 2021-8-25 09:49 编辑

以下为项目目录结构:
common存放公共模块,config为配置文件,img是程序图标,ui.py是主程序,请问下如何把整个项目打包为exe?

                               
登录/注册后可看大图
最佳答案
2021-8-25 08:58:33
本帖最后由 hrpzcf 于 2021-8-25 11:26 编辑

首先程序的启动入口需要与你截图中的文件夹同级,要不然打包后会出问题。打包时一般只需要打包入口py文件,其他引用到的py文件pyinstaller会自动搜索

其次,如果你的程序中有引用路径,确保它是相对路径,否则打包后会出问题

建议你先到pyinstaller官网熟悉一下路径方面的教程,比如os.getcwd()、__file__、sys.executable等路径的差异(未打包、打包成单文件、打包成文件夹,它们的值都有可能出现不一样的结果),如果你通过他们获取相对路径的起始值,一定要到官网看一下它们的区别,八成打包后无法运行的原因都是这个

至于其他的资源文件,比如配置文件等,pyinstaller有参数可以将它们打包进去(你搜一下,我忘了)

对于像你这样结构的程序,建议打包成文件夹的形式,可以避免很多问题。如果需要发送,可以用压缩软件压缩了再发送

最后自荐一下自己写的pyinstaller打包工具,可以省很多功夫:AwesomePyKit,这个AwesomePyKit也是差不多和你程序一样的结构,它的exe版就是用自己打包自己的

最佳答案

查看完整内容

首先程序的启动入口需要与你截图中的文件夹同级,要不然打包后会出问题。打包时一般只需要打包入口py文件,其他引用到的py文件pyinstaller会自动搜索 其次,如果你的程序中有引用路径,确保它是相对路径,否则打包后会出问题 建议你先到pyinstaller官网熟悉一下路径方面的教程,比如os.getcwd()、__file__、sys.executable等路径的差异(未打包、打包成单文件、打包成文件夹,它们的值都有可能出现不一样的结果),如果你通过 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 08:58:33 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2021-8-25 11:26 编辑

首先程序的启动入口需要与你截图中的文件夹同级,要不然打包后会出问题。打包时一般只需要打包入口py文件,其他引用到的py文件pyinstaller会自动搜索

其次,如果你的程序中有引用路径,确保它是相对路径,否则打包后会出问题

建议你先到pyinstaller官网熟悉一下路径方面的教程,比如os.getcwd()、__file__、sys.executable等路径的差异(未打包、打包成单文件、打包成文件夹,它们的值都有可能出现不一样的结果),如果你通过他们获取相对路径的起始值,一定要到官网看一下它们的区别,八成打包后无法运行的原因都是这个

至于其他的资源文件,比如配置文件等,pyinstaller有参数可以将它们打包进去(你搜一下,我忘了)

对于像你这样结构的程序,建议打包成文件夹的形式,可以避免很多问题。如果需要发送,可以用压缩软件压缩了再发送

最后自荐一下自己写的pyinstaller打包工具,可以省很多功夫:AwesomePyKit,这个AwesomePyKit也是差不多和你程序一样的结构,它的exe版就是用自己打包自己的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 10:25:54 | 显示全部楼层
本帖最后由 阿奇_o 于 2021-8-25 10:28 编辑

你项目入口所在的那个py文件,用pyinstaller打包成一个 pyinstaller.exe -F -w  .\myApp.py
生成的dist目录就相当于你的应用的"当前工作目录",把需要的资源和文件,复制到dist里即可。
双击打包后的 myApp.exe (假设是这个名字)就可以运行起来了。

其他的.py文件,如ui.py, 你只要在 myApp.py里import ui ,在打包时,它会自动一起打包这些依赖的模块。

排错:若遇到路径问题,修改myApp.py 使用 '.' 或 os.getcwd() 再os.path.join() 拼接出正确的路径。
你用绝对路径也行,但要考虑pyinstaller后的"当前工作目录"的不同,变成dist的路径了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 11:42:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-25 13:05:32 | 显示全部楼层
hrpzcf 发表于 2021-8-25 11:21
首先程序的启动入口需要与你截图中的文件夹同级,要不然打包后会出问题。打包时一般只需要打包入口py文件, ...

感谢,使用AwesomePyKit已成功打包并正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 03:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表