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程序。

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

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

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

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

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

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源码分享

到此这篇关于Python3如何在Windows和Linux上打包的文章就介绍到这了,更多相关Python3 Linux打包内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

python linux编程与window编程_Python3如何在Windows和Linux上打包相关推荐

  1. Linux系统文件误删除恢复方法;宿主机windows与Linux文件共享!

    实验项目: Linux系统文件误删除恢复方法: 宿主机windows与Linux文件共享 实验环境: 一:VMware虚拟机,Linux系统RedHat6.5(什么版本不重要): 二:安装以下3个依赖 ...

  2. linux刻录windows光盘启动,如何在 Windows / Ubuntu / macOS 上刻录 Ubuntu 启动光盘

    Linux 从入门到放弃,第一篇,必须是安装.正好实验室的服务器也需要重装一下,今天就记录一下如何在 Windows / Ubuntu / macOS 上制作 Ubuntu 的启动光盘.制作启动U盘不 ...

  3. python linux编程与window编程_Python实现Windows和Linux之间互相传输文件(文件夹)的方法...

    项目中需要从Windows系统传输ISO文件到Linux测试系统,然后再Linux测试系统里安装这个ISO文件.所以就需要实现如何把文件从Windows系统传输到Linux系统中. 在项目中使用了ps ...

  4. windows与Linux实时传输数据,I01 物理隔离条件下Windows与Linux服务器的文件传输脚本...

    title: I01 物理隔离条件下Windows与Linux服务器的文件传输脚本author: Adolph Leecategories: 进阶tags: paramiko打怪升级mathjax: ...

  5. linux xrdp 远程桌面,详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面)

    Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统.通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样. 这篇指南讲解如何在 Ub ...

  6. 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux

    一.自由软件基金会的呼吁 上周,2012年将近结束的时候,自由软件基金会(FSF)发出呼吁,要求人们继续支持反Secure Boot垄断,希望签名者能达到5万人(目前是4万). 我觉得,这个呼吁很重要 ...

  7. linux 文件和打印机共享文件夹,能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( )...

    能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( ) 答:SAMBA HTML 代 码 表示() 答:创建一个单选框 根据凯恩思的理论,在短期中总供给线为一条水平线,当总需 ...

  8. linux远程桌面没有声音,远程桌面到 Windows 10 Pro 上的远程麦克风问题

    想从常用笔记本里远程桌面到另一台电脑上的 Windows 10 Pro 进行测试.遇到一些坑,最大的问题比如客户端 DPI 高而导致远程桌面显示的字太小,无法将本地的麦克风作为远程桌面上应用程序的声音 ...

  9. 开启算法编程之旅的准备工作——如何在Windows 上安装 Anaconda 和 PyCharm

    Anaconda 指的是一个开源的 Python 发行版本,其包含了 conda.Python 等 180 多个科学包及其依赖项. PyCharm 是一种 Python IDE(Integrated ...

最新文章

  1. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境
  2. reactnative 获取定位_react native 获取地理位置的方法示例
  3. 准爸爸日记——20120502海淀妇幼建档续
  4. SQL Server 事务日志
  5. tomcat双击startup.bat启动时闪退
  6. 如何在Windows 8中更改登录屏幕的颜色
  7. 测试反模式冰激凌模式的不足_单元测试反模式,完整列表
  8. php 最大限制,php – ModSecurity最大发布限制(PCRE限制错误)
  9. 面向对象(C#)相关理论知识点
  10. 彻底解决--“未能加载文件或程序集“xxx.dll”或它的某一个依赖项”
  11. 2010上机二 中国象棋马走日
  12. python中访问列表元素具体格式_Python3基础 list 访问列表中的列表的元素
  13. win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker
  14. 微信小程序直播有哪些推广技巧?
  15. 【昊鼎王五】pip安装pymssql模块时报错“PEP 517”怎么解决?
  16. HTML经典绝对定位图片
  17. python图像算法工程师_图像算法工程师的岗位职责
  18. 安工大Linux程序设计实验
  19. 休闲零食生产企业如何做好供应链管理?
  20. 【历史上的今天】2 月 19 日:Hacker News 上线;Adob​​e Photoshop 诞生;DVD 退出历史舞台

热门文章

  1. ios kb转m_iOS 音频录音和格式转换
  2. linux mysql设置数据库utf_设置mysql数据库 utf8
  3. winform combobox选择后_后驱车真的比前驱车更加高级吗?涨知识了!
  4. Android开发之关于MVVM架构中视图数据绑定框架dataBinding的基本用法
  5. HTML与CSS基础之兄弟元素(六)
  6. php mysql 绑定变量,在MYSQL中,怎么用PDO绑定变量的方式插入数据?
  7. ffmpeg 视频转ts切片 生成m3u8视频播放列表
  8. Flume学习_接收器
  9. 一般图最大匹配——带花树
  10. 自动化运维之部署Puppet