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根据经纬度计算距离示例
Feb 16 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
解决python3 pika之连接断开的问题
Dec 18 Python
python实现弹窗祝福效果
Apr 07 Python
python文本数据处理学习笔记详解
Jun 17 Python
python logging模块的使用总结
Jul 09 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
Python原始套接字编程实例解析
Jan 29 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
python自动化测试之Selenium详解
Mar 13 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中Date获取时间不正确怎么办
2008/06/05 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JS实现图片切换特效
2019/12/23 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
Python如何实现的二分查找算法
2020/05/27 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
初中政治教学反思
2014/01/17 职场文书
初中学生期末评语
2014/04/24 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
体育节口号
2014/06/19 职场文书
机械机修工岗位职责
2014/08/03 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
奖励申请报告范文
2015/05/15 职场文书
为自己工作观后感
2015/06/11 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书