将Django项目及其依赖打包为独立“产品”

23 投票
6 回答
11578 浏览
提问于 2025-04-16 08:35

我做了一个小应用,使用了Django这个框架。这个应用不是为了放到服务器上运行,而是要在本地电脑上使用。因此,runserver.py运行得很好。

作为开发者,我习惯打开终端,运行python manage.py runserver来使用这个应用。

但是我有一些Mac OS X和Windows的朋友想用我的应用,他们没有安装virtualenvgit或者其他工具。

有没有办法把这个应用打包成一个独立的产品呢?当然,这得依赖于系统上安装了Python,但能不能把virtualenv连同django等所有东西一起打包,然后复制到另一台电脑上就能用呢?

也许还可以让runserver以某种守护进程的方式运行?

6 个回答

3

我现在还没有找到完美的解决方案。

我目前的做法是提供一个docker镜像,因为这对大家来说都很简单好用。这个镜像包含一个alpine基础镜像,因为它非常小巧,还有python、django和应用程序本身。你也可以加上一个像nginx这样的网页服务器和一个像uwsgi或gunicorn这样的应用服务器,并为它开放一个端口。

这样,用户只需要运行这个容器,就可以通过http://localhost:9000/或者类似的地址访问网页应用。这种方式非常方便,也是我尝试一些我找到的应用的首选方法。

所谓的“正规”做法是为你目标的每个操作系统和发行版构建一个安装包,同时提供一个简单的zip压缩包,这样人们也可以手动安装应用。

为了构建这些安装包,我建议使用fpm。它能大大简化使用本地工具打包的麻烦。然后这些包会依赖于像uwsgi或gunicorn这样的合适的应用服务器。

最终,你可以像这样安装:apt install your-package,它会依赖于python-djangouwsgi等。

关于文件放在哪里,每个发行版都有自己的方式。我更喜欢把所有东西放在/usr/share/webapps/myapp/下,把配置文件放在/etc/myapp/config.py或者类似的地方。

对于Windows和macOS,有像PyInstaller这样的解决方案。我还没有在django应用上使用过它,但应该可以满足需求。你也应该把像uwsgi这样的应用服务器包含进去。

一般来说,你不想在生产环境中运行django的开发服务器。所以在打包时要记住这一点。

希望这些信息能对你有所帮助。

3

使用setuptools和easy_install。

这里有一篇入门的文章

2

是的,你可以把它打包起来。虽然用Django来做这件事可能不是最简单的,但其他框架的原则也是一样的。你需要制作一个安装程序,来安装你所需要的所有东西。而这个安装程序在不同的平台上是需要有所不同的,比如Windows、Ubuntu、OS X等等。这也意味着,每个平台的解决方案差别很大,只有一半的内容是和Django有关的。:-(

这有点让人失望,但这就是现在的情况。对于普通用户来说,没有一种简单的、跨平台的软件安装方式。

撰写回答