Python开发 之 Python3打包(windows/linux)详解
文章目录
- 1、唠唠叨叨
- 2、背景
- 3、Python打包工具
- 3.1、py2exe
- 3.2、cx_Freeze
- 3.3、PyInstaller
- 4、Windows打包
- 4.1、单个文件打包
- 4.1.1、核心源码
- 4.1.2、程序运行
- 4.1.3、打包
- 4.1.4、打包后效果
- 4.2、多个文件打包
- 4.2.1、核心源码
- 4.2.2、程序运行
- 4.2.3、打包
- 4.2.4、打包后效果
- 4.3、多层文件打包
- 4.3.1、核心源码
- 4.3.2、程序运行
- 4.3.3、打包
- 4.3.4、打包后效果
- 4.4、多层文件打包(加图标该可执行程序名称)
- 4.4.1、核心源码
- 4.4.2、程序运行
- 4.4.3、打包
- 4.4.4、打包后效果
- 5、Linux打包
- 5.1、多层文件打包
- 5.1.1、核心源码
- 5.1.2、程序运行
- 5.1.3、打包后效果
- 5.2、遇到的错误,以及解决方案
- 5.2.1、错误1(找不到pyinstaller)
- 5.2.2、错误2(rebuild your Python with `--enable-shared`)
- 5.2.3、错误3(找不到 libpython3.6m.so.1.0)
- 6、Github源码分享
1、唠唠叨叨
最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序。小小的研究了一下,Python如何在Windows和Linux上打包,并把程序源码以及各个记录上传到Github上与大家分享。
2、背景
Python版本:3.6.8
Windows版本:Windows 10 家庭中文版 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)
Linux版本:centos7.4
3、Python打包工具
今天没时间研究cx_Freeze,先研究了一下PyInstaller。
3.1、py2exe
py2exe是一个将python转换成windows上的可独立执行的可执行程序(*.exe)的工具。不过,该可执行程序,只能在相同的Windows系统下运行,而且不适合Linux。果断被我舍弃不在研究了。
3.2、cx_Freeze
cx_Freeze 是一个类似 py2exe 的工具,但 cx_Freeze 可以在 linux 下可以直接执行的 ELF 格式的二进制可执行文件,也可以在windows上执行。
cx_Freeze的作用可以让python程序可以脱离python运行环境,在没有安装python的微型linux系统(例如cdlinux、tinycore等)里,方便地运行你的python程序。
程序简介:https://pypi.org/project/cx-Freeze/5.0/
3.3、PyInstaller
号称是目前最全面的打包程序,然后我看了一下程序更新时间。一看是10天前,嗯,不错,就它了。
程序简介:https://pypi.org/project/PyInstaller/
看了一下参数介绍如下:
4、Windows打包
4.1、单个文件打包
4.1.1、核心源码
#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例1,单个文件打包“pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”“pyinstaller -F test1/Demo_Test1_Python.py”
"""def bubble_sort(arr):"""冒泡排序:param arr::return:"""for i in range(1, len(arr)):for j in range(0, len(arr)-i):if arr[j] > arr[j+1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arrif __name__ == '__main__':test = [1, 8, 123, 18, 99, 300]print("************************************")print("* 冒泡排序 *")print("************************************")print("源列表:", test)result = bubble_sort(test)print("排序后:", result)print("************************************")input("按任意键退出...")
4.1.2、程序运行
4.1.3、打包
pyinstaller -F test1/Demo_Test1_Python.py
4.1.4、打包后效果
4.2、多个文件打包
4.2.1、核心源码
#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例2,多个文件打包“pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”“pyinstaller -F test2/Demo_Test2_Python.py”
"""
from test2.Demo_bubble_sort import bubble_sort
from test2.Demo_heap_sort import heap_sortif __name__ == '__main__':test1 = [1, 8, 123, 18, 99, 300]test2 = test1[:]print("************************************")print("* 两个排序 *")print("************************************")print("列表1 id:", id(test1))print("列表2 id:", id(test2))print("源列表1:", test1)print("源列表2:", test2)result1 = bubble_sort(test1)result2 = heap_sort(test1)print("冒泡后:", result1)print("堆排后:", result2)print("************************************")input("按任意键退出...")
4.2.2、程序运行
4.2.3、打包
pyinstaller -F test2/Demo_Test2_Python.py
4.2.4、打包后效果
4.3、多层文件打包
4.3.1、核心源码
#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例3,多层文件打包“pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”“pyinstaller -F test3/Demo_Test3_Python.py”
"""
from test3.sort.Demo_bubble_sort import bubble_sort
from test3.sort.Demo_heap_sort import heap_sort
from test3.Demo_test import Testif __name__ == '__main__':test1 = [1, 8, 123, 18, 99, 300]test2 = test1[:]print("************************************")print("* 两个排序 *")print("************************************")print("列表1 id:", id(test1))print("列表2 id:", id(test2))print("源列表1:", test1)print("源列表2:", test2)result1 = bubble_sort(test1)result2 = heap_sort(test1)print("冒泡后:", result1)print("堆排后:", result2)Test.run()print("************************************")input("按任意键退出...")
4.3.2、程序运行
4.3.3、打包
pyinstaller -F test3/Demo_Test3_Python.py
4.3.4、打包后效果
4.4、多层文件打包(加图标该可执行程序名称)
4.4.1、核心源码
#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例4,多层文件打包加图标,修改程序名“pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”“-p 表示自定义需要加载的类路径(一般情况下用不到)”“pyinstaller -F test4/Demo_Test4_Python.py -n Test4 -i test4/test4.ico”
"""
from test3.sort.Demo_bubble_sort import bubble_sort
from test3.sort.Demo_heap_sort import heap_sort
from test3.Demo_test import Testif __name__ == '__main__':test1 = [1, 8, 123, 18, 99, 300]test2 = test1[:]print("************************************")print("* 两个排序 *")print("************************************")print("列表1 id:", id(test1))print("列表2 id:", id(test2))print("源列表1:", test1)print("源列表2:", test2)result1 = bubble_sort(test1)result2 = heap_sort(test1)print("冒泡后:", result1)print("堆排后:", result2)Test.run()print("************************************")input("按任意键退出...")
4.4.2、程序运行
4.4.3、打包
pyinstaller -F test4/Demo_Test4_Python.py -n Test4 -i test4/test4.ico
4.4.4、打包后效果
5、Linux打包
5.1、多层文件打包
5.1.1、核心源码
#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例5,多层文件打包修改程序名 linux打包“pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”“-p 表示自定义需要加载的类路径(一般情况下用不到)”“pyinstaller -F Demo_Test5_Python.py -n Test5”
"""
from sort.Demo_bubble_sort import bubble_sort
from sort.Demo_heap_sort import heap_sort
from Demo_test import Testif __name__ == '__main__':test1 = [1, 8, 123, 18, 99, 300]test2 = test1[:]print("************************************")print("* 两个排序 *")print("************************************")print("列表1 id:", id(test1))print("列表2 id:", id(test2))print("源列表1:", test1)print("源列表2:", test2)result1 = bubble_sort(test1)result2 = heap_sort(test1)print("冒泡后:", result1)print("堆排后:", result2)Test.run()print("************************************")input("按任意键退出...")
5.1.2、程序运行
5.1.3、打包后效果
5.2、遇到的错误,以及解决方案
5.2.1、错误1(找不到pyinstaller)
我是用 pip install 安装的pyinstaller,于是先find了一下,找到了此命令,于是就做了个软链接。
解决方案,直接将安装目录下面的pyinstaller包作为软链接到/usr/bin下
ln -s /usr/local/python3.6.8/bin/pyinstaller /usr/bin/pyinstaller3.6
5.2.2、错误2(rebuild your Python with --enable-shared
)
这种错误,人家已经把解决方案说出来了,就是需要重新编译嘛,那我们就按照他的来就OK了。先找到源码按照的目录,并按照以下命令操作。
./configure --prefix=/usr/local/python3.6.8(需要安装的目录) --enable-shared --with-ssl
make
make install
5.2.3、错误3(找不到 libpython3.6m.so.1.0)
解决方案,在安装目录找到此文件,并拷贝到/usr/lib64目录下:
6、Github源码分享
https://github.com/ShaShiDiZhuanLan/Demo_Install_Python
Python开发 之 Python3打包(windows/linux)详解相关推荐
- python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...
- python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解
扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...
- 启明云端分享|ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX
ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX 详细安装步骤概览 注:目前master分支,支持S3. 官方开发文档:包含多种平台 https:// ...
- python3 json模块_详解python 3.6 安装json 模块(simplejson)
JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反 ...
- python编译安装详解_linux 编译安装python3.6的教程详解
不要下载 " XZ compressed source tarball " ,目前 python3.6 最新版压缩包名字是:Python-3.6.7.tgz. 把下载的压缩包随便放 ...
- python3 isinstance用法_对python中assert、isinstance的用法详解
1. assert 函数说明: Assert statements are a convenient way to insert debugging assertions into a program ...
- python开发的程序中以电子表格显示数据_使用 Python 读取电子表格中的数据实例详解...
Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...
- pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解
PyCharm导入python项目并配置虚拟环境的教程详解 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的pyth ...
- python3 urlopen_扣丁学堂解析Python3中urlopen()使用详解
扣丁学堂解析Python3中urlopen()使用详解 2018-07-23 13:31:14 1318浏览 在现如今,2018年Python一直属于IT行业中比较热门技术,那么今天扣丁学堂Pytho ...
- python 文字语音朗读-python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...
最新文章
- 不要小看小小的 emoji 表情
- Mac m1 ocr 工具
- Scala集合与Java集合的对比
- libusb:libusb_bulk_transfer的timeout参数问题
- mysql注入提取邮件_【sql注入教程】mysql注入直接getshell
- 【STL深入学习】SGI STL空间配置器详解(一)-第一级空间配置器
- Linux学习之shell
- oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
- 博客营销之博客平台的选择和优化
- HP02: ssh: Could not resolve hostname hp02: Name or service not known HP01: ssh: Could not resolve h
- Eclipse中安装ADT插件
- visual studio 2015 无法打开源文件“stdafx.h“
- qq linux五笔输入法下载官网,QQ五笔输入法下载_QQ五笔输入法下载2021官方下载-太平洋下载中心...
- python是什么专业术语-python术语大全
- cocos2d-之音乐背景播放
- Ubuntu 16.04+ROS+ORB-SLAM2配置以及相关问题
- 强连通基础与例题(Kosaraju算法与Tarjan算法)
- 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御
- 【LaTex】3.2 数据结构(TikZ)
- Navicat 直接修改查询数据
热门文章
- python3总结和spider爬虫
- java 回调机制分为:异步回调 同步回调
- HTML获取当前IP和当前位置
- 中国大陆手机号码如何注册谷歌账号?完美解决收不到验证码的问题
- 只需4步,就能在SOLIDWORKS创建首件检验报告(FAI)
- “匠心之韵,数据之美”之数字营销专访【友盟+】一周年:不忘初心,从整合到融合,从合并到合力...
- 数据库系统概论判断题
- [转] 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效应,刺猬法则,手表定律,破窗理论,二八定律,木桶理论,马太效应,这些你都明白吗?...
- java onfocus_[Java教程]onfocus和onblur应用代码实例
- 未来十年最紧缺的职业