Python3如何在Windows和Linux上打包


Posted in Python onFebruary 25, 2020

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/

看了一下参数介绍如下:

Python3如何在Windows和Linux上打包

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 arr


if __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、程序运行

Python3如何在Windows和Linux上打包

4.1.3、打包

pyinstaller -F test1/Demo_Test1_Python.py

4.1.4、打包后效果

Python3如何在Windows和Linux上打包

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_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("按任意键退出...")

4.2.2、程序运行

Python3如何在Windows和Linux上打包

4.2.3、打包

pyinstaller -F test2/Demo_Test2_Python.py

4.2.4、打包后效果

Python3如何在Windows和Linux上打包

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 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("按任意键退出...")

4.3.2、程序运行

Python3如何在Windows和Linux上打包

4.3.3、打包

pyinstaller -F test3/Demo_Test3_Python.py

4.3.4、打包后效果

Python3如何在Windows和Linux上打包

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 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("按任意键退出...")

4.4.2、程序运行

Python3如何在Windows和Linux上打包

4.4.3、打包

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

4.4.4、打包后效果

Python3如何在Windows和Linux上打包

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 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("按任意键退出...")

5.1.2、程序运行

Python3如何在Windows和Linux上打包

5.1.3、打包后效果

Python3如何在Windows和Linux上打包

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

Python3如何在Windows和Linux上打包

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

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

Python3如何在Windows和Linux上打包

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

Python3如何在Windows和Linux上打包

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

Python3如何在Windows和Linux上打包

6、Github源码分享

https://github.com/ShaShiDiZhuanLan/Demo_Install_Python

到此这篇关于Python3如何在Windows和Linux上打包的文章就介绍到这了,更多相关Python3 Linux打包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
布同自制Python函数帮助查询小工具
Mar 13 Python
python线程池的实现实例
Nov 18 Python
Python实现的简单万年历例子分享
Apr 25 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
创建Django项目图文实例详解
Jun 06 Python
python中的反斜杠问题深入讲解
Aug 12 Python
python内存管理机制原理详解
Aug 12 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
python 如何上传包到pypi
Dec 24 Python
python自然语言处理之字典树知识总结
Apr 25 Python
python实现可下载音乐的音乐播放器
Feb 25 #Python
Python实现分数序列求和
Feb 25 #Python
python等差数列求和公式前 100 项的和实例
Feb 25 #Python
Django单元测试中Fixtures用法详解
Feb 25 #Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 #Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 #Python
python numpy生成等差数列、等比数列的实例
Feb 25 #Python
You might like
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
python多进程控制学习小结
2018/10/31 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Python Django基础二之URL路由系统
2019/07/18 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
Python安装Bs4的多种方法
2020/11/28 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
乡镇庆八一活动方案
2014/02/02 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
创业计划书详解
2019/07/19 职场文书