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中实现贪婪排名算法的教程
Apr 17 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
Sanic框架路由用法实例分析
Jul 16 Python
python实现多人聊天室
Mar 31 Python
使用Python 统计高频字数的方法
Jan 31 Python
python分布式计算dispy的使用详解
Dec 22 Python
pytorch 自定义参数不更新方式
Jan 06 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 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树的代码,可以嵌套任意层
2006/10/09 PHP
PHP 面向对象实现代码
2009/11/11 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
php中strtotime函数用法详解
2014/11/15 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
php删除指定目录的方法
2015/04/03 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
关于COOKIE个数与大小的问题
2011/01/17 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Tensorflow 实现释放内存
2020/02/03 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
市场营销毕业生自荐信
2013/11/23 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
运动会解说词100字
2014/01/31 职场文书
质量保证书范本
2014/04/29 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
详解Python自动化之文件自动化处理
2021/06/21 Python