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

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

P | @ 1的感觉就B 7 { f ; t是,程序员写的软件,要给不懂技术的人用才有价值,否则得到的就是:就这,我也能写。

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

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

我尝试过一些常用的打包工具,py2exe,pyinstaller,这些工具有一z F I 1 t ~ \ |些缺点:

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

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

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

访问 www.pytho0 e 2 3 U \n.org 下载W s M m w Windows embeddable package,如果_ C W你自己的电脑是 64 位的,就下载 64 位,如果要做o I | r i n的更通用些就用 32 位的,因为 64 位电脑可– O e O S T ^ f以运行 32 位的程序,反之则不行。

这里我选择 python-3.9.5,解压后得到 python-3.9p ? L & 9 a W.5-embed-amd64 文件夹,这是一个免安装的 Python 环境,随便复制? b a L ) \ e到其他 Windows 平台都可以稳定运行。进入目录,执行 .\python,只要是标准h G w库都可以导入。

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

安装 pip 工具

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

从这里下载 get# ~ 2 A C d j \ v-pip.py 文件

  1. https://bootstrap.pypa.io/P T V o O t }get-pip.py

将 get-p@ 1 Wip.py 存放在 python-3.9.5-embed-amdQ g ?64 文件夹中,然后进入该目录执行:

  1. .\pythonget-pip.py--no-warn-scriptK b l U l 0 /-location

即可完成 pip 的安装:

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

使用 pip

现在安装 requests 并 impob K } F Y N P Trt 测试。发现报了个错,说z 6 ^ = 6找不到 pip。

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

添加搜索路径

进入 python-3.9.5-L ` ^ 3 I . q Cembed-amd64 文件夹,修改文件 python39._pth 文件

修改之后内容如下:

  1. python39.zip
  2. .
  3. ..
  4. #Uncommenttorunsite.main()automatically
  5. importsite

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

加入上级目录是为了& o g R 5在该目录之外存放一些自己写的 PythG * j 5 &on 脚本,这样目录B [ T . 9 c t $ python-P t = W V d = –3.9.5-embeR ~ 3 [ m _d= ] X \ Q j E s-amd60 ] : & +4 就可以保持独立,不放入任何自己写的脚本,免得 Po g H T \ Jython 环境相关的文件被污染。

取消注释 import site 会| – s 3 l m 0 W自动Q { $ 0 8 X运行 site.main(),查看 Python 的 Lib/site.py 的源代码就可以知道 site.main() 会将 Lib\sitj j P D W Ve-packages 自动添加到 sys.path[ Z y [ Q 8 i ! 中,当然它的功能还不止这! v [ @ c i H ! ,些,我们先知道这些就够了。

接下来再次查看 sys.path,发现 Lib\site-packagesA i j g X M 已经在X Z d里面了:

再次安装 requests 并导入测试[ ( ] ( h t,成功:

发布程序

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

  1. importjson
  2. importrequests
  3. url='https://fanyi.baidu.comG p D 8 A D/sug'
  4. kw=input('请输入待翻译的文本:')
  5. kw={
  6. 'kw':1 v ; U wkw
  7. }
  8. header={
  9. 'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_15_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/8P N r D 0 ] w k |0.0.3987.132Safari/537.36'
  10. }
  11. response=requests.post(url=url,data=kw,headers=header)
  12. response.raise_for_status
  13. respr N B ~ sonse.encP f b O L / 3oding=response.apparent_encoding
  14. content_json=response.json()
  15. #默认转成ascii编码,因i S } M r此需要设Q ? X置成false
  16. content=json.dumps(& + \ . ^ Kcontent_json,ensure_aa ^ ] d `scii=False)
  17. result=json.loads(content)
  18. print(result["data"])

然后放在与 python-3.9.5-ems Y \ = hbed-amd64 文本夹并列的位置,考虑到有人不会打开命令窗口,我们还需要制作一个 bat 脚本文件,用户双击这个文件就可R 1 3 w Kd j V v r N J N L运行我们的程序,内容如下o P K 8 l

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

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

最终文件夹如下所示:

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

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

图片【责任编辑:武晓燕 TEL:(010)6847Q z ! $ u r ) +6606】

点赞 0