windows、linux下打包Python3程序详细方法


Posted in Python onMarch 17, 2020

最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序。研究了一下,Python如何在Windows和Linux上打包

背景

Python版本:3.6.

Windows版本:Windows 10 家庭中文版 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)

Linux版本:centos7.

Python打包工具

今天没时间研究cx_Freeze,先研究了一下PyInstaller。

py2exe

py2exe是一个将python转换成windows上的可独立执行的可执行程序(*.exe)的工具。不过,该可执行程序,只能在相同的Windows系统下运行,而且不适合Linux。果断被我舍弃不在研究了。

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/

PyInstaller

号称是目前最全面的打包程序,然后我看了一下程序更新时间。一看是10天前,嗯,不错,就它了。

程序简介:https://pypi.org/project/PyInstaller/

看了一下参数介绍如下:

windows、linux下打包Python3程序详细方法

Windows打包Python程序实例

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 arr
if __name__ == '__main__':
 test = [1, 8, 123, 18, 99, 300]
 print("************************************")
 print("*    冒泡排序    *")
 print("************************************")
 print("源列表:", test)
 result = bubble_sort(test)
 print("排序后:", result)
 print("************************************")
 input("按任意键退出...")

程序运行

windows、linux下打包Python3程序详细方法

打包方法

pyinstaller -F test1/Demo_Test1_Python.py

打包后效果

windows、linux下打包Python3程序详细方法

多个文件打包

核心源码

#! -*- 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_sort
if __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("按任意键退出...")

程序运行

windows、linux下打包Python3程序详细方法

打包命令

pyinstaller -F test2/Demo_Test2_Python.py

打包后效果

windows、linux下打包Python3程序详细方法

多层文件打包

核心源码

#! -*- 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 Test
if __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("按任意键退出...")

程序运行

windows、linux下打包Python3程序详细方法

打包命令

pyinstaller -F test4/Demo_Test4_Python.py -n Test4 -i test4/test4.ico

打包后效果

windows、linux下打包Python3程序详细方法

Python Linux打包实例

多层文件打包

核心源码

#! -*- 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 Test
if __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("按任意键退出...")

程序运行

windows、linux下打包Python3程序详细方法

打包后效果

windows、linux下打包Python3程序详细方法

遇到的错误,以及解决方案

错误1(找不到pyinstaller)

我是用 pip install 安装的pyinstaller,于是先find了一下,找到了此命令,于是就做了个软链接。

解决方案,直接将安装目录下面的pyinstaller包作为软链接到/usr/bin下

ln -s /usr/local/python3.6.8/bin/pyinstaller /usr/bin/pyinstaller3.

错误2(rebuild your Python with --enable-shared)

windows、linux下打包Python3程序详细方法

这种错误,人家已经把解决方案说出来了,就是需要重新编译嘛,那我们就按照他的来就OK了。先找到源码按照的目录,并按照以下命令操作。

./configure --prefix=/usr/local/python3.6.8(需要安装的目录) --enable-shared --with-ssl
make
make install

错误3(找不到 libpython3.6m.so.1.0)

解决方案,在安装目录找到此文件,并拷贝到/usr/lib64目录下:

本文主要讲解了如何在windows与linux下打包Python3程序的详细方法,更多关于打包Python程序的知识请查看下面的相关链接

Python 相关文章推荐
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python中Lambda表达式详解
Nov 20 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
Python任务自动化工具tox使用教程
Mar 17 #Python
vue常用指令代码实例总结
Mar 16 #Python
django-利用session机制实现唯一登录的例子
Mar 16 #Python
python安装dlib库报错问题及解决方法
Mar 16 #Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 #Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 #Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 #Python
You might like
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
使用Python解析JSON数据的基本方法
2015/10/15 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
单利模式及python实现方式详解
2018/03/20 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
医学专业毕业生推荐信
2014/07/12 职场文书
员工年终考核评语
2014/12/31 职场文书
简历自我评价优缺点
2015/03/11 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书