将独立的 Python 网络应用程序分发给非技术用户

1. 问题背景

我们需要编写一个 Python 网络应用程序,供教师和学生在课堂上使用。该应用程序将在托管的网站上运行,但我们也希望用户能够下载一个自包含的应用程序,以便他们可以在本地安装,以获得更好的性能或他们根本无法在教室中使用互联网连接。

用户将无法管理诸如"首先安装 Python,然后安装依赖项,下载 .tar.gz 存档并将这些命令键入命令行..."之类的指令。我们需要能够创建一种一体机类型的安装程序,该安装程序可以安装 Python、依赖项 (Python-LDAP)、一些 Python 代码,并将基于 Python 的 Web 服务器注册为 Windows 服务。

我们已经查看了以前的问题,但似乎没有一个相关的问题。我们不担心源代码的安全性(我们的应用程序将是开源的,我们将销售与之匹配的内容),我们只需要非技术 Windows 用户能够下载并使用我们的应用程序而不会出现任何问题。

我们目前的想法是使用 NSIS 创建一个包含 Python 和 Python-LDAP 作为 MSI 的安装程序,然后注册我们自己的简单的基于 Python 的 Web 服务器作为 Windows 服务,并在启动菜单/桌面上放置一个快捷方式,链接到 http://localhost。NSIS 可以做到这一点吗?例如,NSIS 可以检查当前安装的 Python 副本吗?有没有更好的方法来做到这一点------是否有方便的框架可以让我们将代码放入一个文件夹并将其捆绑起来以制作安装程序?

2. 解决方案

方法一

使用 NSIS 是一个好主意,但我们建议使用诸如 pyinstaller(我们个人最喜欢的,其他选择是 bb_freeze 和 py2exe)这样的"打包器"来在使用 NSIS 之前创建 exe。

这样做可以获得的主要好处是:

  1. 下载量更小,因为您不会捆绑整个 Python 标准库和应用程序不需要的其他东西,而且您还可以获得一个 exe 文件来启动!
  2. 您可以使用 pyinstaller --onefile 创建一个单文件exe,这是非常方便的,因为用户只需要单击一下即可运行您的应用程序,而无需安装任何其他东西。
  3. pyinstaller 允许您指定要包含在 exe 中的依赖项,这样您就不必担心用户没有安装正确的 Python 版本或其他依赖项。

示例代码如下:

复制代码
pyinstaller --onefile --windowed my_app.py

这将创建一个名为 my_app.exe 的单文件 exe,该文件包含运行应用程序所需的所有内容。

方法二

您可以使用像 cx_Freeze 这样的工具将 Python 脚本转换为可执行文件,然后使用 NSIS 将可执行文件打包成安装程序。

cx_Freeze 可以将 Python 脚本转换为名为"my_app.exe"的可执行文件,然后可以使用 NSIS 将可执行文件打包成名为"my_app-setup.exe"的安装程序,如下所示:

1. 使用 cx_Freeze 将 Python 脚本转换为可执行文件。

复制代码
cxfreeze my_app.py --target-name my_app.exe

这将创建一个名为 my_app.exe 的可执行文件。

2. 使用 NSIS 将可执行文件打包成安装程序。

复制代码
nsis-makensis my_app.nsi

这将创建一个名为 my_app-setup.exe 的安装程序。

3. 使用安装程序安装应用程序。

复制代码
my_app-setup.exe

这将安装应用程序。

不管您选择哪种方法,您都可以创建一个独立的 Python 网络应用程序,该应用程序可以轻松分发给非技术用户。

相关推荐
信誓旦旦的程序猿6 分钟前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)6 分钟前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
shmily麻瓜小菜鸡27 分钟前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
geovindu39 分钟前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
萧鼎39 分钟前
Python 高性能Web框架神器 FastAPI:自动生成API文、基于Pydant、异步请求处理全搞定
前端·python·fastapi
2601_962299881 小时前
Linux执行Python脚本方法
linux·python·脚本·解释器·shebang
郝学胜-神的一滴1 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
旋生万物2 小时前
量子纠错容错率87%?螺旋拓扑码用“相位保护“给量子比特上保险(附Python)
python·ai编程·量子计算·量子纠错·螺旋计算
用户8356290780512 小时前
使用 Python 设置 Excel 页眉和页脚
后端·python
databook2 小时前
异常值检测与处理方法总结
python·数据挖掘·数据分析