从python源码到可自动更新软件

相关阅读

标题 链接
如何打包python程序为exe bczl
【auto-py-to-exe 可视化打包python到exe】 51CTO ZATA

1. python源码

打包时需要特别注意的源码编写规范

除了基本的 Python 编码规范之外,在准备程序进行打包时,还需要特别注意以下几点:

1.1 依赖管理

  • 确保 requirements.txt 文件中列出了程序所有的依赖库
  • 检查依赖库的版本兼容性,避免打包后出现兼容性问题
  • 尽可能使用 pip freeze > requirements.txt 自动生成依赖列表

1.2 动态导入处理

  • 程序中如果使用了动态导入,需要确保 PyInstaller 能够正确识别并打包
  • 可以使用 PyInstaller --hiddenimport 选项手动指定隐藏依赖

1.3 平台兼容性

  • 如果程序需要跨平台运行,需要确保代码本身具有良好的跨平台兼容性
  • 针对不同平台,可能需要使用条件编译或运行时检测来适配

1.4 文件路径处理

  • 程序中涉及文件读写操作时,需要注意处理相对路径和绝对路径
  • 打包后的程序文件结构可能与开发环境不同,需要适当调整路径

1.5 图形界面兼容性

  • 如果程序有图形界面,需要确保界面组件在打包后能正常工作
  • 可能需要额外打包一些 GUI 库的依赖项

1.6 第三方库限制

  • 某些第三方库可能不支持 PyInstaller 打包,需要提前了解并做好替代方案
  • 对于不支持的库,可以考虑使用纯 Python 实现或寻找替代方案

1.7 运行时环境

  • 确保程序在打包后的运行环境下能正常工作,例如环境变量、系统依赖等

目录结构

典型的目录结构

project_name/

├── src/

│ ├── init .py

│ └── main.py

├── tests/

│ ├── init .py

│ └── test_main.py

├── resources/

│ ├── config.ini

│ └── images/

├── requirements.txt

├── setup.py

└── README.md

文件地址如何引用

如果项目中使用到了文件

相对导入

在同一个包内部,可以使用相对导入的方式引用其他模块。

pythonCopyfrom . import some_module

from .subpackage import another_module

绝对导入

跨包引用时,需要使用绝对导入的方式。

pythonCopyfrom project_name.modules import some_module

from project_name.subpackage import another_module

注意事项

避免循环导入问题,可以使用 main 进行条件导入。

保持导入语句的位置在文件顶部。

优先使用绝对导入,相对导入仅在同一包内部使用。

2. 源码打包成exe --- pyinstaller库

打包成一个文件

bash 复制代码
pyinstaller  -F  main.py

打包成多个文件(软件启动速度会快点)

bash 复制代码
pyinstaller -D main.py

使用配置文件.spec打包

your_project.spec a = Analysis(['main.py'], ...

bash 复制代码
pyinstaller your_project.spec

3. exe打包成安装程序 --- 以Inno为例

所需文件-安装inno

首先下载以下两个文件

  1. 下载地址:https://jrsoftware.org/isdl.php
  2. 中文包地址:https://jrsoftware.org/files/istrans/ (找到中文之后点击download会跳转到一个网页,点击另存为就可以,把后缀名修改一下)
  3. 安装inno 安装好了这样

使用inno界面打包exe为安装包

参考:【使用inno制作安装包】Bilibili

  1. 新建
  2. 安装介绍去安装就好了,但是要非常主要这一步
    如果你想把相关文件放到根目录,即使你选的是文件夹,也要再次进行如下的设置
相关推荐
Java后端的Ai之路14 小时前
【Python 教程15】-Python和Web
python
Coder个人博客15 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
冬奇Lab16 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
灰子学技术17 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Doro再努力17 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp18 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
二十雨辰18 小时前
[python]-AI大模型
开发语言·人工智能·python
Doro再努力18 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene18 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
Yvonne爱编码18 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python