从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. 安装介绍去安装就好了,但是要非常主要这一步
    如果你想把相关文件放到根目录,即使你选的是文件夹,也要再次进行如下的设置
相关推荐
2401_8858850433 分钟前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
靳某某。1 小时前
Ubuntu安装php8.4 及redis ngin
linux·redis·ubuntu
大风起兮云飞扬丶1 小时前
Java——枚举
java·开发语言
小灰灰搞电子1 小时前
Rust+Slint 实现高级动态消息提示框源码分享
开发语言·rust
Dev _1 小时前
Python解释器安装在系统级目录导致命令行用户‌没有权限‌向该目录写入文件
开发语言·python
一只旭宝1 小时前
回调函数(Callback)
linux·服务器·算法
木泽八1 小时前
《Ubuntu系统GRUB引导修复操作记录》
linux·运维·ubuntu
qq_406981031 小时前
大白话rust系列08 当变量遮蔽遇上引用,探究变量遮蔽的本质
开发语言·后端·rust
喵了几个咪2 小时前
GoWind ShortPlay 拆解:不用模型的推荐闭环——埋点回流、三路召回与已看去重
开发语言·后端·微服务·golang·gowind
谙弆悕博士2 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室