将Django项目及其依赖打包为独立“产品”
我做了一个小应用,使用了Django这个框架。这个应用不是为了放到服务器上运行,而是要在本地电脑上使用。因此,runserver.py
运行得很好。
作为开发者,我习惯打开终端,运行python manage.py runserver
来使用这个应用。
但是我有一些Mac OS X和Windows的朋友想用我的应用,他们没有安装virtualenv
、git
或者其他工具。
有没有办法把这个应用打包成一个独立的产品呢?当然,这得依赖于系统上安装了Python,但能不能把virtualenv
连同django
等所有东西一起打包,然后复制到另一台电脑上就能用呢?
也许还可以让runserver
以某种守护进程的方式运行?
6 个回答
我现在还没有找到完美的解决方案。
我目前的做法是提供一个docker镜像,因为这对大家来说都很简单好用。这个镜像包含一个alpine基础镜像,因为它非常小巧,还有python、django和应用程序本身。你也可以加上一个像nginx这样的网页服务器和一个像uwsgi或gunicorn这样的应用服务器,并为它开放一个端口。
这样,用户只需要运行这个容器,就可以通过http://localhost:9000/或者类似的地址访问网页应用。这种方式非常方便,也是我尝试一些我找到的应用的首选方法。
所谓的“正规”做法是为你目标的每个操作系统和发行版构建一个安装包,同时提供一个简单的zip压缩包,这样人们也可以手动安装应用。
为了构建这些安装包,我建议使用fpm。它能大大简化使用本地工具打包的麻烦。然后这些包会依赖于像uwsgi或gunicorn这样的合适的应用服务器。
最终,你可以像这样安装:apt install your-package
,它会依赖于python-django
、uwsgi
等。
关于文件放在哪里,每个发行版都有自己的方式。我更喜欢把所有东西放在/usr/share/webapps/myapp/
下,把配置文件放在/etc/myapp/config.py
或者类似的地方。
对于Windows和macOS,有像PyInstaller这样的解决方案。我还没有在django应用上使用过它,但应该可以满足需求。你也应该把像uwsgi这样的应用服务器包含进去。
一般来说,你不想在生产环境中运行django的开发服务器。所以在打包时要记住这一点。
希望这些信息能对你有所帮助。
使用setuptools和easy_install。
这里有一篇入门的文章。
是的,你可以把它打包起来。虽然用Django来做这件事可能不是最简单的,但其他框架的原则也是一样的。你需要制作一个安装程序,来安装你所需要的所有东西。而这个安装程序在不同的平台上是需要有所不同的,比如Windows、Ubuntu、OS X等等。这也意味着,每个平台的解决方案差别很大,只有一半的内容是和Django有关的。:-(
这有点让人失望,但这就是现在的情况。对于普通用户来说,没有一种简单的、跨平台的软件安装方式。