本文转载自微信公众号「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 ~ \ |些缺点:
- 不稳定。明明我自己的电脑可以运行,放到其他电脑就会报错闪退,提示系统缺少 xxx.dllX ( 5 _ m j 动态链接库文件。
- 配置文件复8 \ q q杂。简单的打包方式可能无法满足需要,复杂一些v O ~的就要写配置文件,有时明明写好的配置q i } v f & _ K文件,就是没有生效。
- 打包文件大,启动慢。这些j u 2 Z工具并不会编译成可执行文件,而是将 Python 解释器,依赖的三方库一起打包,如果打包成一个文件,运Y # p行超慢,因为这些会一起加载进内存。
- 还有一种方式就是编写 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 文件
- 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 文件夹中,然后进入该目录执行:
- .\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 文件
修改之后内容如下:
- python39.zip
- .
- ..
- #Uncommenttorunsite.main()automatically
- 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 获取用户输入的文本,自动调用百度翻译,返回翻译的结果,内容如下:
- importjson
- importrequests
- url='https://fanyi.baidu.comG p D 8 A D/sug'
- kw=input('请输入待翻译的文本:')
- kw={
- 'kw':1 v ; U wkw
- }
- header={
- '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'
- }
- response=requests.post(url=url,data=kw,headers=header)
- response.raise_for_status
- respr N B ~ sonse.encP f b O L / 3oding=response.apparent_encoding
- content_json=response.json()
- #默认转成ascii编码,因i S } M r此需要设Q ? X置成false
- content=json.dumps(& + \ . ^ Kcontent_json,ensure_aa ^ ] d `scii=False)
- result=json.loads(content)
- print(result["data"])
然后放在与 python-3.9.5-ems Y \ = hbed-amd64 文本夹并列的位置,考虑到有人不会打开命令窗口,我们还需要制作一个 bat 脚本文件,用户双击这个文件就可R 1 3 w K以d j V v r N J N L运行我们的程序,内容如下o P K 8 l:
- 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 的大小,微信上就可以直接传输了,方便。
点赞 0