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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
使用Python的内建模块collections的教程
Apr 28 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
Python连接Redis的基本配置方法
Sep 13 Python
python实现连续图文识别
Dec 18 Python
对Django外键关系的描述
Jul 26 Python
django 环境变量配置过程详解
Aug 06 Python
python实现两个字典合并,两个list合并
Dec 02 Python
python3实现绘制二维点图
Dec 04 Python
python求前n个阶乘的和实例
Apr 02 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python函数中apply、map、applymap的区别
Nov 27 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
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php反射应用示例
2014/02/25 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
js实现五星评价功能
2017/03/08 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python按行读取文件的简单实现方法
2016/06/22 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python字典底层实现原理详解
2019/12/18 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
实习教师自我鉴定
2013/12/09 职场文书
关于安全的演讲稿
2014/05/09 职场文书
设备管理实施方案
2014/05/31 职场文书
2015年校长新年寄语
2014/12/08 职场文书
2015年团支书工作总结
2015/04/03 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python