文章目录

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

看了一下参数介绍如下:

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

4.1.3、打包

pyinstaller -F test1/Demo_Test1_Python.py

4.1.4、打包后效果

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

4.2.3、打包

pyinstaller -F test2/Demo_Test2_Python.py

4.2.4、打包后效果

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

4.3.3、打包

pyinstaller -F test3/Demo_Test3_Python.py

4.3.4、打包后效果

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

4.4.3、打包

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

4.4.4、打包后效果

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

5.1.3、打包后效果

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


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

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

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


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

6、Github源码分享

https://github.com/ShaShiDiZhuanLan/Demo_Install_Python

Python开发 之 Python3打包(windows/linux)详解相关推荐

  1. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...

    由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...

  2. python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解

    扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...

  3. 启明云端分享|ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX

    ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX 详细安装步骤概览 注:目前master分支,支持S3. 官方开发文档:包含多种平台 https:// ...

  4. python3 json模块_详解python 3.6 安装json 模块(simplejson)

    JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反 ...

  5. python编译安装详解_linux 编译安装python3.6的教程详解

    不要下载 " XZ compressed source tarball " ,目前 python3.6 最新版压缩包名字是:Python-3.6.7.tgz. 把下载的压缩包随便放 ...

  6. python3 isinstance用法_对python中assert、isinstance的用法详解

    1. assert 函数说明: Assert statements are a convenient way to insert debugging assertions into a program ...

  7. python开发的程序中以电子表格显示数据_使用 Python 读取电子表格中的数据实例详解...

    Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...

  8. pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解

    PyCharm导入python项目并配置虚拟环境的教程详解 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的pyth ...

  9. python3 urlopen_扣丁学堂解析Python3中urlopen()使用详解

    扣丁学堂解析Python3中urlopen()使用详解 2018-07-23 13:31:14 1318浏览 在现如今,2018年Python一直属于IT行业中比较热门技术,那么今天扣丁学堂Pytho ...

  10. python 文字语音朗读-python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...

最新文章

  1. 不要小看小小的 emoji 表情
  2. Mac m1 ocr 工具
  3. Scala集合与Java集合的对比
  4. libusb:libusb_bulk_transfer的timeout参数问题
  5. mysql注入提取邮件_【sql注入教程】mysql注入直接getshell
  6. 【STL深入学习】SGI STL空间配置器详解(一)-第一级空间配置器
  7. Linux学习之shell
  8. oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
  9. 博客营销之博客平台的选择和优化
  10. HP02: ssh: Could not resolve hostname hp02: Name or service not known HP01: ssh: Could not resolve h
  11. Eclipse中安装ADT插件
  12. visual studio 2015 无法打开源文件“stdafx.h“
  13. qq linux五笔输入法下载官网,QQ五笔输入法下载_QQ五笔输入法下载2021官方下载-太平洋下载中心...
  14. python是什么专业术语-python术语大全
  15. cocos2d-之音乐背景播放
  16. Ubuntu 16.04+ROS+ORB-SLAM2配置以及相关问题
  17. 强连通基础与例题(Kosaraju算法与Tarjan算法)
  18. 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御
  19. 【LaTex】3.2 数据结构(TikZ)
  20. Navicat 直接修改查询数据

热门文章

  1. python3总结和spider爬虫
  2. java 回调机制分为:异步回调 同步回调
  3. HTML获取当前IP和当前位置
  4. 中国大陆手机号码如何注册谷歌账号?完美解决收不到验证码的问题
  5. 只需4步,就能在SOLIDWORKS创建首件检验报告(FAI)
  6. “匠心之韵,数据之美”之数字营销专访【友盟+】一周年:不忘初心,从整合到融合,从合并到合力...
  7. 数据库系统概论判断题
  8. [转] 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效应,刺猬法则,手表定律,破窗理论,二八定律,木桶理论,马太效应,这些你都明白吗?...
  9. java onfocus_[Java教程]onfocus和onblur应用代码实例
  10. 未来十年最紧缺的职业