【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)

您所在的位置:网站首页 python编好的程序怎么成为软件 【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)

【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)

#【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)| 来源: 网络整理| 查看: 265

运筹优化博士,只做原创博文。更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37

最近写了几个Python的小程序给朋友使用,因为朋友完全就是一个商务运营人员,对编程语言什么的一窍不通,自然我也不可能让他安装Python编译器来运行我的源代码,并且这个小程序未来也是打算给普通用户用的,普通用户自然也没有Python运行环境。

所以我一开始是想把写好的Python代码打包成.exe给他使用,前后折腾了Pyinstaller,Py2exe 发现问题多多,打包后的.exe不是体积巨大就是各种错误。偶然间发现了 Python Release for Windows,试用之后发现部署起来方便,灵活度也比较高。因为商务人员的操作系统都是Windows x64的,我们也不需要考虑跨平台使用,这样的话 Python Release for Windows 就比 Pyinstaller 和 Py2exe 更实用一些。

那么如果你和我遇到相同的问题,你想把你的Python应用程序在本地部署,如果你想把Python应用程序转化为.exe方便给没有Python编译器的人使用的话,那么本文就是一个很好的替代方案。

1 Python Release for Windows 安装包下载

在 Python Releases for Windows 找到所需Python版本的 Windows embeddable package 下载。 在这里插入图片描述 我选得是Python 3.9.9 下载解压之后得到 python-3.9.9-embed-amd64 文件夹。这个文件夹里其实就是一个轻量级的免安装的Python编译器环境,压缩文件也就几十兆吧不算大。这使得我们可以 在Windows平台下 都可以运行 Python环境。

2 Python环境配置

单单有一个Python编译器环境还是不行的,因为我们的应用程序基本都需要调用很多包,而现在我们刚下载下来的这个Python编译器环境还是一片空白的,没有安装所需的包。接下来我们要把我们程序所需的包安装到这个Python编译器环境中去。其实这个过程和conda里或者正常Python里配置环境的过程基本一致。

2.1 安装 Pip

新下载的Python编译器还没有安装pip,没有pip我们安装别的包就很不方便,所以第一步我们首先安装pip。 在这个网站里下载 get-pip.py文件:https://bootstrap.pypa.io/get-pip.py,然后将 get-pip.py文件放在解压后的python-3.9.9-embed-amd64文件中,如下图所示: 在这里插入图片描述 在命令行中输入:python get-pip.py --no-warn-script-location 如下图所示即可完成pip的安装: 在这里插入图片描述 安装完成后还可以在 ./Lib/site-packages 文件夹下看到目前已经安装过的包,确认pip确实已经安装了。这个其实和正常的Python和Anaconda里是一样的。 在这里插入图片描述

2.2 安装其它包

pip包已经安装成功了,接下来我们可以用pip来安装其它的包。在命令行中调用如下指令,发现 Lib/site-packages 并不在我们的系统路径中。 在这里插入图片描述所以接下来我们需要把 Lib/site-packages 路径添加进来,这样python才能识别出刚才安装的pip包。在文件夹下找到 python39._pth 文件并打开,此时打开后的内容为: 在这里插入图片描述 然后将该文件修改为如下内容并保存: 在这里插入图片描述对照一下修改了2处内容,1是在第三行添加了… 2是取消了最后一行对import size的注释。修改后的文件如下所示方便大家复制。

python39.zip . .. # Uncomment to run site.main() automatically import site

打开命令行,验证确实Lib/site-packages路径已经被添加进来了。 在这里插入图片描述接下来就可以用pip安装你程序所需的包了,如下所示是安装pandas和numpy在这里插入图片描述记住这里要把你所需的所有的包都要安装进来才能成功运行的你的代码。

3 发布程序

我们要发布的python源代码很简单,如下所示:

import pandas as pd df = pd.read_excel("./demo_data.xlsx") print(df)

我们把如上代码存在read_excel.py中,并且把它放到python-3.9.9-embed-amd64平级的文件夹中,如下图所示: 在这里插入图片描述紧接着在命令行中运行 python read_excel.py 即可在命令行中运行该代码,如下图所示: 在这里插入图片描述 考虑到我们的用户,可能也不太会使用命令行或者说命令行使用起来比较麻烦,我们进一步写一个.bat文件将,上面的命令行放入.bat脚本文件中帮我们执行,用户只需要双击运行.bat文件就可以运行代码了,无需在命令行中输入指令了。.bat文件内容如下所示:

cd /d %~dp0 python read_excel.py cmd.exe

第一行:cd /d %~dp0 表示切换到当前文件运行的目录。 第二行:python read_excel.py 表示运行read_excel.py程序。 第三行:cmd.exe 表示启动命令行。 下图所示是运行.bat文件得到的结果: 在这里插入图片描述 可以看到运行.bat文件也可以和命令行运行相同的结果。

4 踩坑经验(已安装Anaconda环境会覆盖新环境的问题)

到上面为止其实已经完成了python的环境的部署,但是在我自己的电脑上却发现程序运行报错,错误提示显示是缺某个python的包,而我已经安装过了这个包。这个时候我发现由于我安装了Anaconda所以在命令行中python默认会选择Anaconda下的python而不会选择我新部署的python-embed环境,发现这个bug之后,我进行了三个地方的修改: 1 我将 python-embed文件夹下的 python.exe 改名为 python_embed.exe,这么做的目的就是为了区分出python关键字,因为python关键字已经被Anaconda占用了,所以我通过改名后将两个python环境区分出来。下次调用python_embed关键字就知道是我要启动新安装的python环境,而不是启动Anaconda里的python环境了。在这里插入图片描述 2 将要执行的python程序和python_embed.exe放到同一个文件夹下 在这里插入图片描述 3 把start.bat文件夹修改为如下

cd /d %~dp0 cd python-3.9.9-embed python_embed main.py cmd.exe

和之前的start.bat文件比较修改了两个地方:1是加了一句 cd python-3.9.9-embed,这是因为我们要进入到子文件夹下面才能开始执行,2是把 python main.py 改为 python_embed main.py,这样就是运行我们要的python环境,而不会调用Anaconda下的python环境。

总结

总得来说我觉得 Python Release for Windows实用性还是蛮高的,Python Release for Windows的优势有以下几点: 1 哪怕你的代码调用了很多包,你只要按照你配置Anaconda或者Python环境的方式一步步就可以把环境配置到 Python Release for Windows 里。不像Pyinstaller 和 Py2exe 经常出现一些莫名其妙的问题,尤其是包调用的多了,也很难找出来问题在哪里。 2 打包后程序体积小便于他人使用,同样的代码 我用Pyinstaller 能有1个多G的大小,而Python Release for Windows也就100多M,压缩之后也就40多M。这么一小的体积就可以包括一个python环境,轻便环保便于发送。 3 Pyinstaller 生成 exe 需要很长时间,生成的过程还经常报错。相对来说 Python Release for Windows 则不存在此类问题。

参考文献:

最简单的方式发布你的Python应用 - 云+社区 - 腾讯云



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3