前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >最简单的方式发布你的Python应用

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

作者头像
somenzz
发布于 2021-05-18 07:19:17
发布于 2021-05-18 07:19:17
1.9K00
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

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

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

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

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

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

  1. 不稳定。明明我自己的电脑可以运行,放到其他电脑就会报错闪退,提示系统缺少 xxx.dll 动态链接库文件。
  2. 配置文件复杂。简单的打包方式可能无法满足需要,复杂一些的就要写配置文件,有时明明写好的配置文件,就是没有生效。
  3. 打包文件大,启动慢。这些工具并不会编译成可执行文件,而是将 Python 解释器,依赖的三方库一起打包,如果打包成一个文件,运行超慢,因为这些会一起加载进内存。

还有一种方式就是编写 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。

  1. 从这里下载 get-pip.py 文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://bootstrap.pypa.io/get-pip.py
  1. 将 get-pip.py 存放在 python-3.9.5-embed-amd64 文件夹中,然后进入该目录执行:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.\python get-pip.py  --no-warn-script-location

即可完成 pip 的安装:

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

  1. 使用 pip

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

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

  1. 添加搜索路径

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

修改之后内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python39.zip
.
..
# Uncomment to run site.main() automatically
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 获取用户输入的文本,自动调用百度翻译,返回翻译的结果,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json
import requests
url='https://fanyi.baidu.com/sug'
kw = input('请输入待翻译的文本:')
kw = {
    'kw':kw
}
header = {
    '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'
}
response = requests.post(url=url, data=kw, headers=header)
response.raise_for_status
response.encoding = response.apparent_encoding
content_json = response.json()
#默认转成ascii编码,因此需要设置成false
content = json.dumps(content_json,ensure_ascii=False)
result = json.loads(content)
print(result["data"])

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 的大小,微信上就可以直接传输了,方便。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用python快速开发桌面小工具
在日常开发中,总需要一些普通的小工具。小工具嘛,要得急,写得也急,总有很多不完善的问题,频繁修改成了一个较大的问题。比如之前用c#写了一个将excel表自动转成csv文本的工具,后面需要一个转为Tab分割的文本,本来也就是改一点小东西,重新编译一下就可以,但是工程不小心丢了,确实比较尴尬了。
全栈程序员站长
2022/08/31
8530
python3绝对路径,相对路径
from __future__ import absolute_import的作用: 
py3study
2020/01/19
1K0
.NET Core奇技淫巧之WinForm使用Python.NET并打包
之前整了一个GZY.EFCoreCompare 的库,可以用做对比实体与数据库结构.感兴趣可以去看看,地址:GZY.EFCoreCompare
GuZhenYin
2025/03/20
930
.NET Core奇技淫巧之WinForm使用Python.NET并打包
opencv-基础环境准备
小毛coder
2024/03/26
3301
opencv-基础环境准备
学了半天,import 到底在干啥?
显然会导致我们所不希望的问题,即Python不知道要到哪里去找这个名为B的模块(包是一种特殊的模块):
小小詹同学
2020/11/09
8770
学了半天,import 到底在干啥?
golang调用python3,并使用python模块中的方法
因项目需要,很多代码和python模块是go语言没有的,虽然有个项目是转化python代码到golang代码,但是还没开始用,关键是python引用的模块如此之多,不可能都去转换对吧。
hotqin888
2022/03/10
3.9K0
golang调用python3,并使用python模块中的方法
Python3学习笔记 | 二十二、Python的模块-模块的宏伟蓝图
模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。从实际角度来看,模块往往对应于Python程序文件(或是用外部语言如C、Java或C#编写而成的扩展)。每一个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块由两个语句和一个重要的内置函数进行处理。 import:使客户端(导入者)以一个整体获取一个模块 from:允许客户端从一个模块文件中获取特定的变量名 imp.reload:在不终止Python程序的情况下,提供了一种重新载入模块文件代码的方法。
TeamsSix
2019/09/24
7530
Python3学习笔记 | 二十二、Python的模块-模块的宏伟蓝图
python--如何优雅的import
import应该是python代码中比较常见的模块了。import就是导入其他文件中的类,方法,变量,我认为除了主流程逻辑,其他代码文件模块就是为了给别人import的~
languageX
2023/08/08
1.1K0
解决python3中关于import的疑难杂症
在Python工程项目中,如果一个文件夹下有__init__.py文件就会认为该文件夹是一个包package,这样可以方便组织工程文件,避免模块名冲突。
TOMOCAT
2021/04/09
2K0
python安装
小毛coder
2024/03/22
2400
python安装
使用启科QuPot+Runtime+QuSaaS进行量子应用开发及部署-调用AWS Braket计算后端
使用启科QuTrunk开发的量子应用可以通过QuSaaS 部署到启科QuPot云环境中对用户提供服务。本文将介绍如何使用QuTrunk进行AWS云上应用程序的开发和如何通过QuSaaS将量子应用部署到QuPot平台,并且QuTrunk计算后端调用AWS Braket服务。具体展示之前,先和大家简要介绍下启科的量子计算相关软件:QuPot和QuSaaS和Runtime。
量子发烧友
2023/03/08
6290
使用启科QuPot+Runtime+QuSaaS进行量子应用开发及部署-调用AWS Braket计算后端
Python3 与 C# 扩展之~模块专栏
代码裤子:https://github.com/lotapp/BaseCode/tree/maste
逸鹏
2018/07/07
1.3K0
Python3 与 C# 扩展之~模块专栏
python模块的常用安装方式
之前我们讲过一些python的模块,如chardet、pygame,这些模块不包含在python的默认代码中,需要从外部下载并安装。有些模块提供了自动安装的文件,比如pygame的windows版本,直接双击安装就可以。但大多数模块没有提供这样的安装方式,有些同学没能成功安装而导致无法在程序中引入模块。在这里,介绍一下python模块几种常见的安装方法。 1. 直接copy 下载的模块文件中已经有了模块的文件,有些模块只有一个文件,比如较早版本的BeautifulSoup,有些是一个文件夹,比如新版本Be
Crossin先生
2018/04/17
1.1K0
Python 第三方包的安装和卸载
在 Python 的生态系统中,如果仅有官方认定的标准库,还不能说它是一个开放系统。开放系统的重要特征是每个开发者都有权编辑和发布模块(或包),人人能够为这个系统增砖添瓦。因此就有了标准库之外的模块(或包),统称为“第三方包”。
老齐
2022/01/27
1.2K0
Python 第三方包的安装和卸载
pypy 打包_手机按键精灵脚本编写
我们可以在ArcGIS之外调用arcpy站点包运行python独立脚本,从而批量化任务提高工作效率。 如果可以把做好的脚本打包成exe是不是就更方便了呢?想想一键式处理也挺开心的。
全栈程序员站长
2022/09/30
7500
Python中的模块与包#学习猿地
> 系统模块就是一个python的程序脚本,专门提供给我们自己的程序使用。它们是在安装好python环境时,就已经存在的,需要的时候可以使用 import 导入到程序中使用。
学习猿地
2020/03/19
4040
python之模块和包
一 Python模块简介 1 模块化 一般来说,编程语言中,库,包,模块是同一种概念,是代码组织方式 python中只有一种模块对象类型,但是为了模块化组织的便利,提供了一个概念: 包 模块(module):指的是python的源代码文件 包(package):指的是模块组织在一起放入和包名同名的目录及相关文件 ---- 可以将代码量较大的程序分割成多个有组织,彼此间独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块 ---- 模块在物理形式上表现为以.py 结尾的代码文
py3study
2020/01/09
1.5K0
python之模块和包
分享下最近在技术上的一些收获
程序员是个非常辛苦的职业,为了写出健壮的代码,可能要牺牲娱乐和休息的时间。但这是值得的,只要你的代码有价值,也就是能满足特定人群的需求,或节省他们的时间,或解决他们的问题,这些付出最终都能带来金钱上的回报。
somenzz
2020/11/25
5750
分享下最近在技术上的一些收获
python安装虚拟环境步骤_python虚拟环境迁移
http://blog.csdn.net/pipisorry/article/details/47008981
全栈程序员站长
2022/09/27
8.1K0
python安装虚拟环境步骤_python虚拟环境迁移
python生成微信好友头像图
更新本地pip python -m pip install --upgrade pip C:\Users\allms>python -m pip install --upgrade pip Collecting pip Downloading https://files.pythonhosted.org/packages/f9/fb/863012b13912709c13cf5cfdbfb304fa6c727659d6290438e1a88df9d848/pip-19.1-py2.py3-none-any
暖月寒星
2020/03/12
1.8K0
相关推荐
使用python快速开发桌面小工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验