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 urlopen()函数 示例分享
Jun 12 Python
使用python开发vim插件及心得分享
Nov 04 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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实现window平台的checkdnsrr函数
2015/05/27 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
python保存网页图片到本地的方法
2018/07/24 Python
python 用下标截取字符串的实例
2018/12/25 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
python 利用toapi库自动生成api
2020/10/19 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
用python制作个视频下载器
2021/02/01 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
实习单位接收函
2014/01/11 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
小学生期末评语
2014/04/21 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
导游词之广西漓江
2019/11/02 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python