部署无服务器的Django应用程序?

时间:2018-06-18 15:32:39

标签: python django

最初要求是面向外部的应用程序,我们将使用服务器。但是,现在所有代码都已完成,长期愿景已经改变......要求是在没有服务器(物理或远程)的情况下使用面向内的应用程序。

将使用该应用程序的团队将是同一网络上的5个用户,每个用户都将在桌面上单独安装该应用程序。

我的问题是,将这个应用程序部署到每个人的机器上的最佳方式是什么,它们可以轻松地自行安装。如何在不输入python manage.py runserver的情况下始终在每个人的机器上运行应用程序?

2 个答案:

答案 0 :(得分:2)

我必须做同样的事情。我的解决方案是使用PyInstaller,它将所有包和文件捆绑到一个整齐的分发文件夹中,其中包含一个可执行文件。

首先,查看this link获取教程。说实话,仅这一点对我来说不起作用,但它可以为你服务。因此,我将在下面记录一些要注意的事项,并从这里继续,好像它完美地适合您。

在您的manage.py文件上运行PyInstaller后,它将为您创建三个新对象:dist文件夹,构建文件夹和myAppName.spec文件。在dist文件夹中是项目的可执行文件。要将此项目部署到其他地方,唯一需要的是dist文件夹(或者甚至只是其中的myAppName文件夹)。只需拉上拉链即可将其发送出去。

dist文件夹中的可执行文件不会仅通过单击它运行,但它仍然需要您键入python manage.py runserver。为了解决这个问题,我创建了一个可执行文件和modified it's target的快捷方式。因此,如果您的项目的路径为C:\path\to\proj,则快捷方式的目标将为C:\path\to\proj runserver。这应该允许您双击快捷方式并运行本地服务器。如果您还想在同一次点击中打开网络浏览器make a batch file。如果您不想打开控制台,try TrayIt

如果你想在你的项目上重新运行PyInstaller,摆脱那些dist和构建文件夹的速度,但保留.SPEC文件并在其上运行pyinstaller。如果您愿意,它可以帮助您更加具体地了解该过程。

需要注意的问题:

如上所述,当我在我的Django应用程序上运行PyInstaller时,我遇到了一些问题。

  • 每当我运行新的可执行文件时,控制台就会抱怨"未找到模块"错误。 Here is my solution这些错误。我最终不得不添加比我的答案更多的隐藏导入。问,你会收到。
  • PyInstaller应该打包所有模板(html文件),但事实并非如此。我不得不手动将所有文件添加到dist\myAppName\django\contrib\admin\templates文件夹。
  • PyInstaller也应该抓住你使用的所有外部模块,但事实并非如此。要使用丢失的模块,我必须从我下载它的位置获取模块文件夹并手动将其添加到我的dist/myAppName文件夹中。只是粘贴它就可以了。
  • PyInstaller也应该摆脱未使用的进口,但事实并非如此。我不得不在我的.SPEC文件的excludes列表中添加了很多模块,这样我的dist文件夹就不算大了。

如果您的PyInstaller经历比我的好,请告诉我。我认为我的问题可能是孤立的事例。

答案 1 :(得分:1)

您可以使用py2exe用于Windows或py2app用于OSX将python应用程序转换为可执行文件以启动Django应用程序。