python上位机开发
约 1034 字大约 3 分钟
2026-08-03
python上位机开发
- 开发目标:python3 + hprose,linux开发环境,docker后期打包
环境搭建
安装必要的软件支持
- sudo apt update
- sudo apt install python3 python3-pip git
- python3 --version
创建虚拟环境实现安装Hprose项目的依赖
- sudo apt install python3.12-venv
- python3 -m venv ~/serial_bridge_venv:创建后会生一个serial_bridge_venv文件夹
- ls ~/serial_bridge_venv/:创建后会生一个serial_bridge_venv文件夹
虚拟环境中安装包
- source ~/serial_bridge_venv/bin/activate:激活虚拟环境,命令行前面会显示 (serial_bridge_venv)
- pip install pyserial
- pip install flask
- pip install hprose
- pip install requests
- pip list:查看安装有哪些包
- deactivate:退出虚拟环境
测试python运行(虚拟环境运行)
- mkdir ~/Desktop/serial_bridge:虚拟环境目录
- cd ~/Desktop/serial_bridge
- touch main.py:创建文件
- vim main.py:编写代码
- python main.py:运行
推荐工程目录
serial_bridge/ ├── src/ # 源代码目录 │ ├── init.py # 使 src 成为 Python 包 │ ├── main.py # 主程序入口 │ ├── serial_service.py # 串口服务类 │ ├── protocol_handler.py #协议处理类 │ └── config.py # 配置文件 ├── tests/ # 测试目录 │ ├── test_client.py # 测试客户端 │ └── test_basic.py # 基础测试 ├── docs/ # 文档目录 │ └── README.md # 项目说明 ├── logs/ # 日志目录(自动生成) ├── scripts/ # 脚本目录 │ ├── start.sh # 启动脚本 │ └── install.sh # 安装脚本 ├── requirements.txt # Python 依赖 └── .vscode/ # VSCode 配置 ├── settings.json └── launch.json
vscode插件
- Python (Microsoft) - Python 支持
- Pylance (Microsoft) - 智能提示
- Python Debugger (Microsoft) - 调试功能
验证
- 完成主要的src的主要开发,即创建服务器并启动串口连接
- 通过test_client.py模拟客户端进行json格式的发送
- git clone tty0tty工程,make & make install(激活虚拟串口sudo modprobe tty0tty,关闭虚拟串口sudo rmmod tty0tty)
- 虚拟串口对/dev/tnt0 /dev/tnt1,chmod修改虚拟串口权限
- 安装picocom串口调试工具
- 服务器连接虚拟串口tnt0,用客户端模拟json格式发送,服务器接收解析后并往tnt0发送,由于tnt1是tnt0的虚拟串口对,故可以通过picocom打开tnt1进行串口查看,退出指令ctrl+A→ctrl+X
linux打包exe文件
- 创建requirements.txt:pip freeze > requirements.txt(方便其他移植时一个个pip install依赖)
- 先进入先前的虚拟环境:pip install pyinstaller
- serial_bridge目录下打包:pyinstaller --onefile --add-data "src:src" src/main.py(windows下是;代替:)
- 打包出现json报错,尝试:pyinstaller --onefile --add-data="src:src" --paths=./src src/main.py
- 打包依旧出现json报错,尝试:pyinstaller --onefile --add-data="src:src" --hidden-import=json --hidden-import=serial --hidden-import=hprose src/main.py
- 若遇到部分import相关报错,编辑生产的main.spec文件,修改hiddenimports部分,再重新运行打包:pyinstaller main.spec
windows打包exe文件
- 确保程序本身涉及windows的兼容性,如串口路径
- git,克隆工程到windows
- windows下创建虚拟环境:
- python -m venv serial_bridge_venv(或git bash可以用py -m venv serial_bridge_venv)
- source serial_bridge_venv/Scripts/activate # 激活虚拟环境
- 重新在windows下安装依赖:
- 方法1:一次性安装pip install -r requirements.txt
- 方法2:单独pip install 各个依赖
- pip install pyserial # 串口
- pip install flask # 如果用到了flask
- pip install hprose # hprose创建服务器接收数据
- pip install requests # http post请求上传服务器
- pip install redis # 安装redis
- pip install gmssl # sm2相关
- 虚拟环境下打包1
- 依赖安装pip install -r requirements.txt
- pip install pyinstaller
- serial_bridge目录下打包:pyinstaller --onefile --add-data "src;src" src/main.py(linux下是:代替;)
- windows下之间执行的打包命令:
pyinstaller --onefile \
--name="beidou_serial_bridge" \
--add-data="src:src" \
--add-data="config.json:." \
--hidden-import=json \
--hidden-import=logging \
--hidden-import=os \
--hidden-import=sys \
--hidden-import=uuid \
--hidden-import=gmssl \
--hidden-import=redis \
--hidden-import=redis.client \
--hidden-import=serial \
--hidden-import=serial.tools \
--hidden-import=serial.tools.list_ports \
--hidden-import=hprose \
--hidden-import=requests \
--hidden-import=src.config \
--hidden-import=src.serial_service \
--hidden-import=src.protocol_handler \
--hidden-import=src.group_cache \
--hidden-import=src.signature_cache \
src/main.py- 虚拟环境打包2-加密
- sudo apt update
- sudo apt install patchelf # 使用nuitka时用
- pip install nuitka # nuitka打包
python -m nuitka \
--standalone \
--include-data-files=config.json=config.json \
--include-package=redis \
--include-package=serial \
--include-package=hprose \
--include-package=requests \
--output-filename=beidou_serial_bridge \
src/main.pywindows下更改图标
- 下载 rcedit, GitHub - electron/rcedit 下载 rcedit.exe https://github.com/electron/rcedit/releases
- 在线网页转换的方式,适用Png创建ico图标文件
- Git Bash或CMD执行:[rcedit-x64.exe文件路径] [exe文件路径] --set-icon [图标文件路径]
- /d/10、非专业类软件/ico图标修改/rcedit-x64.exe ~/Desktop/serial_bridge/beidou_serial_bridge/nuitka_dist/beidou_serial_bridge.exe --set-icon ~/Desktop/serial_bridge/beidou_serial_bridge/nuitka_dist/app.ico
查看redis客户端的内容
- redis-cli -a "LwCW!itdLQ670Fi" KEYS "*"
