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中的tuple元组详细介绍
Feb 02 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
Python实现矩阵转置的方法分析
Nov 24 Python
答题辅助python代码实现
Jan 16 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python 平衡二叉树实现代码示例
Jul 07 Python
浅析Python四种数据类型
Sep 26 Python
200行python代码实现2048游戏
Jul 17 Python
解决python 输出到csv 出现多空行的情况
Mar 24 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php实现的农历算法实例
2015/08/11 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JS交换变量的方法
2015/01/21 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
酒店公关部经理岗位职责
2013/11/24 职场文书
远程教育心得体会
2014/01/03 职场文书
会计的岗位职责
2014/03/15 职场文书
优秀食品类广告词
2014/03/19 职场文书
七匹狼男装广告词
2014/03/21 职场文书
销售提升方案
2014/06/07 职场文书