首页 > 系统相关 >Python开发 之 Python3打包(windows/linux)详解

Python开发 之 Python3打包(windows/linux)详解

时间:2022-10-31 18:02:08浏览次数:75  
标签:test1 sort Python Demo windows Python3 print 打包


文章目录

  • ​​1、唠唠叨叨​​
  • ​​2、背景​​
  • ​​3、Python打包工具​​
  • ​​3.1、py2exe​​
  • ​​3.2、cx_Freeze​​
  • ​​3.3、PyInstaller​​
  • ​​4、Windows打包​​
  • ​​4.1、单个文件打包​​
  • ​​4.1.1、核心源码​​
  • ​​4.1.2、程序运行​​
  • ​​4.1.3、打包​​
  • ​​4.1.4、打包后效果​​
  • ​​4.2、多个文件打包​​
  • ​​4.2.1、核心源码​​
  • ​​4.2.2、程序运行​​
  • ​​4.2.3、打包​​
  • ​​4.2.4、打包后效果​​
  • ​​4.3、多层文件打包​​
  • ​​4.3.1、核心源码​​
  • ​​4.3.2、程序运行​​
  • ​​4.3.3、打包​​
  • ​​4.3.4、打包后效果​​
  • ​​4.4、多层文件打包(加图标该可执行程序名称)​​
  • ​​4.4.1、核心源码​​
  • ​​4.4.2、程序运行​​
  • ​​4.4.3、打包​​
  • ​​4.4.4、打包后效果​​
  • ​​5、Linux打包​​
  • ​​5.1、多层文件打包​​
  • ​​5.1.1、核心源码​​
  • ​​5.1.2、程序运行​​
  • ​​5.1.3、打包后效果​​
  • ​​5.2、遇到的错误,以及解决方案​​
  • ​​5.2.1、错误1(找不到pyinstaller)​​
  • ​​5.2.2、错误2(rebuild your Python with `--enable-shared`)​​
  • ​​5.2.3、错误3(找不到 libpython3.6m.so.1.0)​​
  • ​​6、Github源码分享​​

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/​

看了一下参数介绍如下:

Python开发 之 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、程序运行

Python开发 之 Python3打包(windows/linux)详解_linux_02

4.1.3、打包

pyinstaller -F test1/Demo_Test1_Python.py

4.1.4、打包后效果

Python开发 之 Python3打包(windows/linux)详解_程序运行_03

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

Python开发 之 Python3打包(windows/linux)详解_linux_04

4.2.3、打包

pyinstaller -F test2/Demo_Test2_Python.py

4.2.4、打包后效果

Python开发 之 Python3打包(windows/linux)详解_程序运行_05

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

Python开发 之 Python3打包(windows/linux)详解_linux_06

4.3.3、打包

pyinstaller -F test3/Demo_Test3_Python.py

4.3.4、打包后效果

Python开发 之 Python3打包(windows/linux)详解_linux_07

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

Python开发 之 Python3打包(windows/linux)详解_程序运行_08

4.4.3、打包

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

4.4.4、打包后效果

Python开发 之 Python3打包(windows/linux)详解_linux_09

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

Python开发 之 Python3打包(windows/linux)详解_linux_10

5.1.3、打包后效果

Python开发 之 Python3打包(windows/linux)详解_程序运行_11

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)

Python开发 之 Python3打包(windows/linux)详解_python_12


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

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

Python开发 之 Python3打包(windows/linux)详解_python_13

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

Python开发 之 Python3打包(windows/linux)详解_linux_14


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

Python开发 之 Python3打包(windows/linux)详解_linux_15

6、Github源码分享

​https://github.com/ShaShiDiZhuanLan/Demo_Install_Python​


标签:test1,sort,Python,Demo,windows,Python3,print,打包
From: https://blog.51cto.com/u_15854865/5810736

相关文章

  • Python 复杂版贪食蛇(源代码)
    Python复杂版贪食蛇(源代码)简易版贪食蛇代码如下,直接运行即可。备注:案例来源于书:Pygame游戏开发指南1.效果图2.源代码#!/usr/bin/envpython#-*-coding:utf-8......
  • python三大基础函数
    在Python中有三个基础函数,分别是filter()、map()和reduce(),他们分别为我们提供过滤、映射和聚合的功能。1. filter()函数在数据筛选和过滤的时候我们通常会采用filter()......
  • python爬取公众号文章发布时间
    使用xpath取出来的是空,爬取到本地的html,时间的标签如下,内容也是是空的<emid="publish_time"class="rich_media_metarich_media_meta_text"></em>经过查找发现网页使......
  • python-函数
    打算今天花三个小时学习一下python,要不然强化学习的很多内容看不懂一、参数1.形式参数和实际参数形式参数:定义函数的时候在括号中的参数,在函数内部会使用这个参数进......
  • 随机化算法解决圆排列问题 - python解法
    问题描述给定n个大小不等的圆,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给......
  • python中*的用法
    python中*是非常常见的一个运算符,它主要有以下几个功能:乘法运算符;函数形参表示可变参数;函数实参代表tuple;序列解包为tuple;zip解包运算;参考资料:​​Python3*和**运算符​......
  • python多继承及其super的用法
    python也具有多继承的功能,而同样的,大家能想到多继承必须要引入一些特定的方法来准确调用子类或基类的重载、重写的方法,否则会出现混乱。本文参考​​Multipleinheritance......
  • windows10卸载vmware workstation
    在应用与功能里面,vmware的卸载选项是禁用的,而点击修改,却也弹出了报错,似乎无法直接卸载。网上大多说需要下载一个WindowsInstallerCleanUP之类的软件,但又对那种未知来源的......
  • python中的round
    参考资料:​python的round函数使用​​python的round函数作用是四舍五入,其函数定义如下:round接收两个参数,第一个是数字,第二个是保留的位数,如果不显式给定第二位,则默认不保留......
  • 【python】list中extend和append的区别
    在python列表中,extend和append都可以往列表中加入元素,extend是扩充单个元素,如:a='abc123'b=[]b.extend(a)>>>b=['a','b','c','1','2','3']而append是扩......