我用Django作为框架制作了一个小小的“应用程序”。这是一个无法部署到服务器但在计算机上本地运行的应用程序。因此runserver.py工作得很好。
我作为开发人员很乐意启动终端,运行python manage.py runserver.py并使用它。但我有一些想要使用它的Mac OS X和Windows朋友。他们没有virtualenv,git和一切设置。有什么方法我可以把它打包成一个独立的有点产品吗?当然它取决于系统上安装的Python,但是可以用django和所有东西打包virtualenv,然后将它复制到另一个系统并使其工作?
甚至可能在某种恶魔模式下运行runserver?
是的,你可以打包它。 Django可能不是最容易实现的,但其他框架的原则是相同的。您需要制作一个安装程序来安装您需要的所有内容。对于不同的平台,安装程序需要有所不同。例如Windows,Ubuntu,OS X等。这也意味着每个平台的答案明显不同,只有一半的答案取决于Django。 :-(
这有点糟透了,但这就是生活。没有很好的平台独立方式为最终用户安装软件。
使用setuptools和easy_install。
这是介绍性的article。
有几种方法可以做到这一点。我认为你正在寻找更多的构建工具(包括包装),而不仅仅是Python解决方案。这是我过去使用的一对夫妇:
zc.buildout:用于构建和部署Python模块和应用程序,但也可以通过一些按摩来使用其他语言。易于使用(用于构建工具)。
make:软件构建经典。适用于几乎所有语言,但有点陈旧,难以学习第一个计时器。
我还没有找到完美的解决方案。
我目前的方法是提供一个docker图像,因为这对每个人来说都很容易使用。这包括一个alpine基本图像,因为它很小,python + django和应用程序本身。您还可以包含像nginx这样的网络服务器和像uwsgi或gunicorn这样的应用服务器,并为其公开端口。
因此,最终您的用户只需运行容器并访问http://localhost:9000/下的Web应用程序或类似的东西。这非常方便,也是我尝试一些我发现的应用程序的首选方式。
“正确”的方法是为您定位的每个操作系统和发行版构建一个包,并使用简单的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 dev服务器。所以在包装时请记住这一点。
我希望有所帮助。
适用于Linux的新snap软件包管理器应该完全适合这项任务。它提供了迄今为止对Python应用程序非常痛苦的所有解决方案(依赖项,解释器等),同时避免了Docker的复杂性。
这些天Docker可能是一个很好的答案
用户首先需要install Docker,但它在Windows和OSX以及Linux上运行。
您的Dockerfile负责安装所有依赖项,然后运行devserver(或者您甚至可以在容器中运行正确的Web服务器)