当前位置: 首页 > news >正文

将Python工程打成可执行文件

一、Linux环境打包python工程

  将程序交付到生产环境(甲方),不想要环境维护者或甲方看到源代码,所以需要将源代码打包成可执行文件

  Requirements — PyInstaller 6.10.0 documentation  

  一)安装打包环境(PyInstaller)

  1、安装依赖包
yum install -y python-setuptools python-dev build-essential
  2、下载并安装pyinstaller

  在网址下载pyisntaller的包,地址:https://github.com/pyinstaller/pyinstaller/releases ,下载对应的tar包

cd ${BASE_DIR}
#下载所需的release版本tar -xvf  pyinstaller-4.10.tar.gz 
cd pyinstaller-4.10
pip3 install wheel
python3 setup.py install如果中间没有报错的话,pyinstaller就安装完成了验证pyinstaller 
pyinstaller --version
4.10
  3、打包python项目源码

  PyInstaller 工具的命令语法如下:

pyinstaller 选项 Python 源文件(程序主文件)

  举例

## 示例代码
]# cat main.py 
print("hello,world!")pyinstaller -F main.py

  编译完成后,会将可执行文件保存到dist目录下

]# tree -L 1 dist
dist
└── main

  执行可执行文件

]# ./dist/main
hello,world!
  4、打包复杂环境,需修改配置文件然后重新编译

  因为" pyinstaller -F 程序主文件.py ”这个打包的方法它只会打包当前目录下的所有py文件,而不会打包config和database两个文件夹,所以此时的可执行文件打包的并不完整,此时该怎么做

  这种情况需要修改程序main.spec

# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['main.py'],pathex=['/app/test'],binaries=[],datas=[],hiddenimports=[],hookspath=[],runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)dict_database = Tree('/app/test/database',prefix='database')
a.datas += dict_database
dict_config = Tree('/app/test/config',prefix='config')
a.datas += dict_configpyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)
exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,runtime_tmpdir=None,console=True )

  重新编译

pyinstaller mian.spec


http://www.mrgr.cn/news/30874.html

相关文章:

  • Vue 学习随笔系列十四 -- JavaScript巧妙用法
  • Wxml2Canvas小程序将dom转为图片,bug总结
  • 前端学习八股资料CSS(二)
  • 布谷直播源码部署服务器关于数据库配置的详细说明
  • 2024中国游戏出海情况
  • Microsoft Visual C++ 安装失败 0x80070666
  • 上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用
  • STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)
  • Python知识点:Python内存管理与优化
  • 第五届“马栏山杯”国际音视频算法大赛创新应用赛投票环节正式启动啦!
  • 支付宝开放平台-开发者社区——AI 日报「9 月 20 日」
  • 面试了50场AIGC,才总结出这190+个问题答案
  • 新手引导|小程序开发指南基础篇(二)
  • Android 如何使用jdk命令给应用/APK重新签名。
  • 深度理解servlet容器、servlet应用、servlet三者的关系
  • 大数据时代:历史、发展与未来
  • 黑科技网址推荐:特殊功能的工具网址
  • 滚雪球学SpringCloud[6.1讲]: Spring Cloud Sleuth详解
  • 【TPAMI 2024】如何让模型在任何环境下都能胜出?领域泛化学习从单一到多元!
  • 24:RTC实时时钟
  • 【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • 第十九节:学习WebFlux与前端响应式-非阻塞-流式通讯(自学Spring boot 3.x的第四天)
  • 平价头戴式蓝牙耳机有哪些?四款公认平价性能超强品牌机型推荐
  • 第六天旅游线路预览——从景区门口到天山天池
  • JavaScript可视化
  • 【Unity踩坑】UI Image的fillAmount不起作用