当前位置: 首页 > 科技观察

发布你的Python应用最简单方法

时间:2023-03-19 20:44:32 科技观察

本文转载自微信公众号《Python第7期》,作者somenzz。转载本文请联系Python七号公众号。记得以前看过一篇文章,说龙哥当年要卖foxmail,买主是雷军,雷军的意思是:我可以这么写。所以没有交易。我的感觉是,程序员写的软件只有给不懂技术的人用才有价值。否则,你得到的是:就是这样,我可以写。我们不是龙哥,写不出牛逼的foxmail,但是写个自动化脚本还是可以的。哪怕是一个小脚本,只要能提供帮助,其他人也会需要它。那么如何把自己写的程序分发给别人呢?我尝试了一些常用的打包工具,py2exe、pyinstaller,这些工具都有一些缺点:不稳定。明明自己的电脑可以运行,但是放到别的电脑上就会报错死机,说明系统缺少xxx.dll动态链接库文件。配置文件很复杂。简单的打包方式不一定能满足需求,需要编写比较复杂的配置文件,有时明明写的配置文件并没有生效。打包文件大,启动慢。这些工具并没有编译成可执行文件,而是与Python解释器和依赖的第三方库打包在一起。如果把它们打包成一个文件,它们运行起来会很慢,因为这些会一起加载到内存中。还有一种方式就是编写web应用,以网站、H5、微信小程序等形式发布,这个门槛有点高。需要对Web开发有一定的经验和熟悉,需要购买服务器或云产品。今天分享一个非常简单可行的Python应用发布方式。发布后,用户只需双击一个文件即可启动您的应用程序。不懂任何技术的人都可以使用它。具体方法是使用官网发布的内嵌Python包,不过这个只适用于Windows,没什么大不了的,大多数非程序员都用Windows。“如果是Mac,请使用py2app打包。”访问www.python.org下载Windows可嵌入包。如果你自己的电脑是64位的,就下载64位的。如果你想让它更通用,就用32位的,因为64位的电脑可以运行32位的程序,反之则不行。这里我选择python-3.9.5,解压后得到python-3.9.5-embed-amd64文件夹。这是一个无需安装的Python环境,将其拷贝到其他Windows平台上,可以在其他任何Windows平台上稳定运行。进入目录,执行.\python,只要是标准库,都可以导入。不过在正式使用之前,我们还需要进行两处修改。安装pip工具我们不可能只用标准库写程序,还要用到第三方库,比如requests,所以需要为Python环境配置pip。从这里下载get-pip.py文件https://bootstrap.pypa.io/get-pip.py将get-pip.py存放在python-3.9.5-embed-amd64文件夹下,然后进入目录即可执行:.\pythonget-pip.py--no-warn-script-location完成pip安装:此时pip已经安装到Lib\site-packages下。现在使用pip安装请求和导入测试。发现报错,说找不到pip。好了,现在进入Python解释器环境,查看Python搜索路径sys.path,发现并没有Lib\site-packages,那就添加吧。添加搜索路径进入python-3.9.5-embed-amd64文件夹,修改文件python39._pth。文件修改后内容如下:python39.zip...#Uncommenttorunsite.main()automaticallyimportsite这里修改了两个地方,一个是添加父目录..,一个是取消注释导入站点。增加上层目录的目的是为了在该目录外存放一些自己写的Python脚本,使python-3.9.5-embed-amd64目录保持独立,没有自己写的脚本,防止文件与Python环境被污染有关。取消注释导入站点将自动运行site.main()。查看Python的lib/site.py源码可知site.main()会自动将lib\site-packages添加到sys.path中,当然它的功能远不止这些,我们知道这些就足够了第一的。接下来再次查看sys.path,发现里面已经有Lib\site-packages:再次安装requests,导入测试,成功:发布程序现在可以写代码发布程序了,我写了一个脚本main.py这里获取用户输入的文字会自动调用百度翻译,返回翻译结果。内容如下:importjsonimportrequestsurl='https://fanyi.baidu.com/sug'kw=input('请输入要翻译的文字:')kw={'kw':kw}header={'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_15_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.132Safari/537.36'}response=requests.post(url=url,data=kw,headers=header)response.raise_for_statusresponse.encoding=response.apparent_encodingcontent_json=response.json()#默认转为ascii编码,所以需要设置为falsecontent=json.dumps(content_json,ensure_ascii=False)result=json.loads(content)print(result["data"])并与python-3.9.5-embed-amd64文本文件夹并排放置,考虑到有人不会打开命令窗口,我们还需要制作一个bat脚本文件,用户可以双击这个文件运行我们的程序,内容如下:cmd.exe/K.\python-3.9.5-embed-amd64\pythonmain.py这里,/K参数传递给cmd,这样该程序将不会在p之后运行程序完成。关闭命令窗口,这样我们就可以看到程序返回了什么,否则窗口会随着滑动而消失。最终文件夹如下:现在压缩main.py,双击运行.bat,将python-3.9.5-embed-amd64放到一个文件夹embed_python.7z中,发给需要的人。他解压后,双击bat文件就可以运行你的程序了:压缩后大小只有10MB,可以直接传到微信上,方便。