文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 05:15

关注

本文转载自微信公众号「Python七号」,作者somenzz。转载本文请联系Python七号公众号。

记得之前看过一篇文章,说的是龙哥当年准备卖掉 foxmail,买方是雷军,雷军的意思是:就这,我也能写。于是就没有成交。

我的感觉就是,程序员写的软件,要给不懂技术的人用才有价值,否则得到的就是:就这,我也能写。

我们不是龙哥,写不出牛逼的 foxmail,但是写个自动化的脚本还是可以的,即使是一个小小的脚本,只要能提供帮助,其他人也是有需求的。

那么如何将你写的程序发布给其他人用呢?

我尝试过一些常用的打包工具,py2exe,pyinstaller,这些工具有一些缺点:

  1. 不稳定。明明我自己的电脑可以运行,放到其他电脑就会报错闪退,提示系统缺少 xxx.dll 动态链接库文件。
  2. 配置文件复杂。简单的打包方式可能无法满足需要,复杂一些的就要写配置文件,有时明明写好的配置文件,就是没有生效。
  3. 打包文件大,启动慢。这些工具并不会编译成可执行文件,而是将 Python 解释器,依赖的三方库一起打包,如果打包成一个文件,运行超慢,因为这些会一起加载进内存。
  4. 还有一种方式就是编写 Web 应用程序,发布成 Web 站点、H5、微信小程序等形式,这个门槛就有点高了,你需要有一定的经验且熟悉 Web 开发,还要购买服务器或者云产品。

今天分享一下非常简单可行的方式发布 Python 应用程序,发布后用户只需要双击一个文件就可以启动你的应用程序,不懂任何技术的人都会使用。

具体的方法就是使用官网发布的嵌入式 Python 包,不过这个仅适用于 Windows,这也不是什么大不了的,大多数非程序员用的都是 Windows。「如果是 Mac 请使用 py2app 来打包」

访问 www.python.org 下载 Windows embeddable package,如果你自己的电脑是 64 位的,就下载 64 位,如果要做的更通用些就用 32 位的,因为 64 位电脑可以运行 32 位的程序,反之则不行。

这里我选择 python-3.9.5,解压后得到 python-3.9.5-embed-amd64 文件夹,这是一个免安装的 Python 环境,随便复制到其他 Windows 平台都可以稳定运行。进入目录,执行 .\python,只要是标准库都可以导入。

不过在正式使用之前,我们还需要进行两点改造。

安装 pip 工具

我们写程序不可能只用标准库,还要使用第三方库,比如 requests,那么就要为 Python 环境配置 pip。

从这里下载 get-pip.py 文件

  1. https://bootstrap.pypa.io/get-pip.py 

将 get-pip.py 存放在 python-3.9.5-embed-amd64 文件夹中,然后进入该目录执行:

  1. .\python get-pip.py  --no-warn-script-location 

即可完成 pip 的安装:

此时 pip 已经安装在 Lib\site-packages 下。

使用 pip

现在安装 requests 并 import 测试。发现报了个错,说找不到 pip。

好,现在进入 Python 解释器环境,看下 Python 的搜索路径 sys.path,发现并没有 Lib\site-packages,那么们就添加它。

添加搜索路径

进入 python-3.9.5-embed-amd64 文件夹,修改文件 python39._pth 文件

修改之后内容如下:

  1. python39.zip 
  2. .. 
  3. # Uncomment to run site.main() automatically 
  4. import site 

这里修改了两个地方,一个是加入上级目录 ..,另一个是取消注释 import site。

加入上级目录是为了在该目录之外存放一些自己写的 Python 脚本,这样目录 python-3.9.5-embed-amd64 就可以保持独立,不放入任何自己写的脚本,免得 Python 环境相关的文件被污染。

取消注释 import site 会自动运行 site.main(),查看 Python 的 Lib/site.py 的源代码就可以知道 site.main() 会将 Lib\site-packages 自动添加到 sys.path 中,当然它的功能还不止这些,我们先知道这些就够了。

接下来再次查看 sys.path,发现 Lib\site-packages 已经在里面了:

再次安装 requests 并导入测试,成功:

发布程序

现在就可以写代码发布程序了,我这里写好了一个脚本 main.py 获取用户输入的文本,自动调用百度翻译,返回翻译的结果,内容如下:

  1. import json 
  2. import requests 
  3. url='https://fanyi.baidu.com/sug' 
  4. kw = input('请输入待翻译的文本:'
  5. kw = { 
  6.     'kw':kw 
  7. header = { 
  8.     'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' 
  9. response = requests.post(url=url, data=kw, headers=header) 
  10. response.raise_for_status 
  11. response.encoding = response.apparent_encoding 
  12. content_json = response.json() 
  13. #默认转成ascii编码,因此需要设置成false 
  14. content = json.dumps(content_json,ensure_ascii=False
  15. result = json.loads(content) 
  16. print(result["data"]) 

然后放在与 python-3.9.5-embed-amd64 文本夹并列的位置,考虑到有人不会打开命令窗口,我们还需要制作一个 bat 脚本文件,用户双击这个文件就可以运行我们的程序,内容如下:

  1. cmd.exe /K .\python-3.9.5-embed-amd64\python main.py 

这里 cmd 传入 /K 参数是为了程序运行完成后不关闭命令窗口,这样我们就可以看到程序返回了啥,不然直接唰的一下窗口就没了。

最终文件夹如下所示:

现在将 main.py、双击运行.bat、python-3.9.5-embed-amd64 压缩到一个文件夹 embed_python.7z,发送给需要的人,他解压后,双击那个 bat 文件就可以运行你的程序了:

压缩后只有 10 MB 的大小,微信上就可以直接传输了,方便。

 

来源:Python七号内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯