制作绿化版Python解锁Python桌面程序的高级打包方式

2021/7/15 20:41:39

本文主要是介绍制作绿化版Python解锁Python桌面程序的高级打包方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

大家好,我是小小明,今天我将教大家一种除了用python内置库打包,让没有安装python的机器能够直接运行python程序的方法。

具体原理就是我们制作一个绿化版的python,将其放在项目目录下,用系统对应的脚步去调用相应命令启动程序。当然本文只针对Windows平台,对于Mac平台应该原理也差不多,大家可以再理解本文的操作逻辑后,再针对性在Mac平台操作。

注意:本方法不会对python源代码作任何处理,如果要求python源代码不会被看到的话还是得使用pyinstaller或nuitka打包。

本方法只适用无所谓源码是否会被看到的情况。

使用本方法打包python桌面程序,运行速度比内置库打包快很多倍,几乎与直接用python命令运行一致。

首先我们需要制作一个绿化版python备用:

绿化版python的制作

下载zip包

首先我们需要去下载一个解压版(zip格式)的python,注意不要下载安装版的。

各版本的下载地址在:https://www.python.org/ftp/python/

这里面包含了全部版本的原生python:

image-20210715104857229

我选择了3.7.4这个版本:

image-20210715105141099

每个版本下面可以选择的下载文件很多:

  • 从系统位数分为32位和64位;
  • 从平台分为Windows、Mac和Linux;
  • 从类型分为beta版、rc版和正式版。

beta版表示测试版;rc表示发布候选预览版;rc1则表示第一个维护版本的发布预览版,rc2则表示第二个候选发行版是正式版最终发布前的最后检查。

因此我们根据自己的情况选择64位Windows平台的正式版,即上图所示的安装包,下载地址:

https://www.python.org/ftp/python/3.7.4/python-3.7.4-embed-amd64.zip

下载完成之后我们就可以解压安装包了:

image-20210715114158292

解压后的python非常纯净,连pip都没有,现在我们需要安装pip:

安装pip

在https://pip.pypa.io/en/stable/installing/下我们可以找到get-pip.py脚本的下载链接:

image-20210715114718023

下载地址:https://bootstrap.pypa.io/get-pip.py

我们将其下载到前面解压的python目录下,在Windows命令行的操作方式是:

certutil -urlcache -split -f https://bootstrap.pypa.io/get-pip.py

然后执行安装pip:

python get-pip.py

image-20210715115613473

安装完成后,python路径下增加了两个文件夹。可以在Scripts目录下找到安装好的pip文件:

image-20210715115942449

用winhex打开可以看到其实4个文件的内容完全一样。

为了增加pip的通用性,我们可以用Sublime等文本编辑器打开pip.exe文件,修改python所在的路径(我使用的是notepad++):

image-20210715134438977

拖到底可以看到原本的python路径是一个绝对路径。下面我们改成相对路径,方便我们将绿化版python移动到任何地方后都可以使用pip安装库。

打算以后直接在pip所在路径下执行pip命令,那么python就位于相对于当前目录的上级目录中,所所以我改成了..\python.exe

image-20210715135601949

但这时我们还无法正常使用pip,会出现如下问题:

E:\tmp\python-3.7.4-embed-amd64\Scripts>pip
Traceback (most recent call last):
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", line 193, in _run_module_as_main
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", line 85, in _run_code
  File "E:\tmp\python-3.7.4-embed-amd64\Scripts\pip.exe\__main__.py", line 4, in <module>
ModuleNotFoundError: No module named 'pip'

这时我们需要修改python根目录的下的python37._pth文件,同样使用文本编辑器打开,取消import site的注释即可。修改完成后如下:

image-20210715135859976

此时再次执行pip:

E:\tmp\python-3.7.4-embed-amd64\Scripts>pip list
Package    Version
---------- -------
pip        21.1.3
setuptools 57.1.0
wheel      0.36.2

至此pip已经可以用来安装常用的包了。

添加项目目录到默认模块搜索路径

后面我们的绿化版python是打算放在项目根目录下面,为了能够将项目根目录加入模块默认搜索路径中,所以上面的python37._pth文件再增加..表示上级目录,修改后:

image-20210715155818277

绿化版python安装tkinter

这步并没有啥可以直接安装的方案,经过一番研究,我们可以把安装版中的tkinter相关文件都copy到当前的项目目录下。

下面操作前,先将python-3.7.4-embed-amd64重命名为py374。

需要将以下2个目录3个文件复制到py374根目录下:

  1. 安装版python的tcl目录
  2. 安装版python的Lib\tkinter目录
  3. 安装版python的DLLs目录下的tcl86t.dll、tk86t.dll和_tkinter.pyd三个文件

image-20210715162207347

复制后:

image-20210715162326693

测试一下:

image-20210715163833534

可以看到在绿化版python中能够正常使用tk。

至此我们的绿化版python就制作完成,可以随项目一起打包。当前最纯净的状态可以收藏起来备份,随时copy到新项目中。也可以按照同样的思路制作其他版本的绿化版python。

使用示例

库安装

在制作好Windows平台的绿化版python后,我们就可以尝试使用它对某个项目打包了,这里我们以前面写的抽奖程序为例来操作。

这个小项目就两个文件,将前面做好的绿化版python放于项目根目录下:

image-20210715141739449

然后进入项目python中的pip所在文件夹安装程序所需要的库:

pip install PySimpleGUI

image-20210715142557361

于是我们可以先尝试直接运行一下:

image-20210715170830466

可以看到通过绿化版python程序正常运行。

vbs运行脚本

至此我们可以封装一个vbs脚本run.vbs,内容如下:

Set ws = CreateObject("WScript.Shell")
ws.Run "py374\pythonw lottery_draw.py"

然后用户只需直接双击打开run.vbs文件即可直接运行程序:

动画2

注意:pythonw命令相对于python命令不会产生多余的黑窗界面。

bat脚本转exe

如果更喜欢exe格式或希望自定义程序图标,还可以写bat脚本,然后通过一些工具转成exe。

首先编写bat脚本run.bat,内容如下:

py374\pythonw lottery_draw.py

然后打开Bat_To_Exe_Converter工具(百度一下有很多网址可以下载):

image-20210715173950459

然后就得到了自定义图标的exe文件:

image-20210715174702185

双击exe正常运行,打开速度比pyinstaller的速度快多了。



这篇关于制作绿化版Python解锁Python桌面程序的高级打包方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程