将独立的 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 网络应用程序,该应用程序可以轻松分发给非技术用户。

相关推荐
凤山老林几秒前
排序算法:详解插入排序
java·开发语言·后端·算法·排序算法
郝学胜-神的一滴32 分钟前
Effective STL 第5条:区间成员函数优先于单元素成员函数
开发语言·c++·程序人生·stl·软件工程
江太翁39 分钟前
Kotlin 与 Java 互操作中常用注解
java·python·kotlin
星期天要睡觉1 小时前
深度学习——基于ResNet18迁移学习的图像分类模型
人工智能·python·分类·迁移学习
小钱c71 小时前
Python使用 pandas操作Excel文件并新增列数据
python·excel·pandas
杨福瑞1 小时前
C语言数据结构:算法复杂度(2)
c语言·开发语言·数据结构
道之极万物灭1 小时前
Go基础知识(一)
开发语言·后端·golang
AI数据皮皮侠1 小时前
中国博物馆数据
大数据·人工智能·python·深度学习·机器学习
张晓~183399481211 小时前
碰一碰发视频 系统源码 /PHP 语言开发方案
开发语言·线性代数·矩阵·aigc·php·音视频·文心一言
代码不停1 小时前
Java前缀和算法题目练习
java·开发语言·算法