从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. 安装介绍去安装就好了,但是要非常主要这一步
    如果你想把相关文件放到根目录,即使你选的是文件夹,也要再次进行如下的设置
相关推荐
朝新_7 分钟前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir9 分钟前
Calendar类日期设置进位问题
java·开发语言
风逸hhh1 小时前
python打卡day46@浙大疏锦行
开发语言·python
火兮明兮1 小时前
Python训练第四十三天
开发语言·python
ascarl20102 小时前
准确--k8s cgroup问题排查
java·开发语言
Gaoithe2 小时前
ubuntu 端口复用
linux·运维·ubuntu
互联网杂货铺3 小时前
完美搭建appium自动化环境
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
Gyoku Mint3 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
fpcc3 小时前
跟我学c++中级篇——理解类型推导和C++不同版本的支持
开发语言·c++
德先生&赛先生3 小时前
Linux编程:1、文件编程
linux