从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. 安装介绍去安装就好了,但是要非常主要这一步
    如果你想把相关文件放到根目录,即使你选的是文件夹,也要再次进行如下的设置
相关推荐
山烛15 分钟前
KNN 算法中的各种距离:从原理到应用
人工智能·python·算法·机器学习·knn·k近邻算法·距离公式
guozhetao28 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
墨染点香34 分钟前
第七章 Pytorch构建模型详解【构建CIFAR10模型结构】
人工智能·pytorch·python
##echo35 分钟前
嵌入式Linux裸机开发笔记9(IMX6ULL)GPIO 中断实验(1)
linux·c语言·笔记·单片机·嵌入式硬件
Reggie_L43 分钟前
RabbiteMQ安装-ubuntu
linux·ubuntu·ruby
枫叶丹41 小时前
【Qt开发】信号与槽(二)-> 信号和槽的使用
开发语言·qt
阿什么名字不会重复呢1 小时前
在线工具+网页平台来学习和操作Python与Excel相关技能
python·数据分析
AIGC_北苏1 小时前
让UV管理一切!!!
linux·人工智能·uv
Vertira1 小时前
python 阿里云 安装 dashscope的简介、安装
开发语言·python
gc_22992 小时前
学习Python中Selenium模块的基本用法(1:简介)
python·selenium