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

问题描述 投票:13回答:6

我用Django作为框架制作了一个小小的“应用程序”。这是一个无法部署到服务器但在计算机上本地运行的应用程序。因此runserver.py工作得很好。

我作为开发人员很乐意启动终端,运行python manage.py runserver.py并使用它。但我有一些想要使用它的Mac OS X和Windows朋友。他们没有virtualenv,git和一切设置。有什么方法我可以把它打包成一个独立的有点产品吗?当然它取决于系统上安装的Python,但是可以用django和所有东西打包virtualenv,然后将它复制到另一个系统并使其工作?

甚至可能在某种恶魔模式下运行runserver?

python django packaging
6个回答
2
投票

是的,你可以打包它。 Django可能不是最容易实现的,但其他框架的原则是相同的。您需要制作一个安装程序来安装您需要的所有内容。对于不同的平台,安装程序需要有所不同。例如Windows,Ubuntu,OS X等。这也意味着每个平台的答案明显不同,只有一半的答案取决于Django。 :-(

这有点糟透了,但这就是生活。没有很好的平台独立方式为最终用户安装软件。


2
投票

使用setuptools和easy_install。

这是介绍性的article


1
投票

有几种方法可以做到这一点。我认为你正在寻找更多的构建工具(包括包装),而不仅仅是Python解决方案。这是我过去使用的一对夫妇:

zc.buildout:用于构建和部署Python模块和应用程序,但也可以通过一些按摩来使用其他语言。易于使用(用于构建工具)。

make:软件构建经典。适用于几乎所有语言,但有点陈旧,难以学习第一个计时器。


1
投票

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

我目前的方法是提供一个docker图像,因为这对每个人来说都很容易使用。这包括一个alpine基本图像,因为它很小,python + django和应用程序本身。您还可以包含像nginx这样的网络服务器和像uwsgi或gunicorn这样的应用服务器,并为其公开端口。

因此,最终您的用户只需运行容器并访问http://localhost:9000/下的Web应用程序或类似的东西。这非常方便,也是我尝试一些我发现的应用程序的首选方式。

“正确”的方法是为您定位的每个操作系统和发行版构建一个包,并使用简单的zip包,这样人们也可以手动安装应用程序。

要建立包我建议使用fpm。使用原生工具完成包装的大部分痛苦。然后,这些包将依赖于适当的应用程序服务器,如uwsgi或gunicorn。

所以最后你可以像apt install your-package一样安装它,它将取决于python-djangouwsgi等。

对于位置以及将所有文件放在包中的位置,每个发行版都有自己的方式。我更喜欢将所有内容放在/usr/share/webapps/myapp/下,并在/etc/myapp/config.py或类似的东西下配置。

对于Windows和macOS,有像PyInstaller这样的解决方案。我还没有用过django应用程序,但它应该可以完成这项工作。您也应该在其中包含类似uwsgi的应用服务器。

通常,您不希望在生产环境中运行django dev服务器。所以在包装时请记住这一点。

我希望有所帮助。


1
投票

适用于Linux的新snap软件包管理器应该完全适合这项任务。它提供了迄今为止对Python应用程序非常痛苦的所有解决方案(依赖项,解释器等),同时避免了Docker的复杂性。


0
投票

这些天Docker可能是一个很好的答案

用户首先需要install Docker,但它在Windows和OSX以及Linux上运行。

您的Dockerfile负责安装所有依赖项,然后运行devserver(或者您甚至可以在容器中运行正确的Web服务器)

© www.soinside.com 2019 - 2024. All rights reserved.