最初的要求是有一个面向外的应用程序,我们打算使用服务器。但是,现在所有代码都已完成,并且长期愿景已发生变化......要求是在没有服务器(物理或远程)的情况下拥有一个面向内部的应用程序。
将使用该应用程序的团队将是同一网络上的 5 个用户,每个用户都将在他们的桌面上单独安装该应用程序。
我的问题是,将此应用程序作为一个包部署到每个人的机器上的最佳方式是什么,他们可以轻松地自行安装。不用输入 python manage.py runserver,应用程序如何能一直在每个人的机器上运行?
我必须做同样的事情。我的解决方案是使用 PyInstaller,它将所有包和文件捆绑到一个整洁的分发文件夹中,其中包含一个可执行文件。
首先看this link一个教程。老实说,仅此一项对我不起作用,但对您却可以。因此,我将在下面记录一些需要注意的事项,并从这里继续,就好像它非常适合您一样。
PyInstaller 在您的 manage.py 文件上运行后,它将为您创建三个新对象:dist 文件夹、build 文件夹和 myAppName.spec 文件。在 dist 文件夹中是该项目的可执行文件。要将此项目部署到其他地方,唯一需要的是 dist 文件夹(或者甚至只是其中的 myAppName 文件夹)。只需将其拉上 zipper 并寄出即可。
虽然 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 和 build 文件夹以提高速度,但保留该 .SPEC 文件并在其上运行 pyinstaller。如果您愿意,它可以帮助您更具体地了解流程。
需要注意的问题:
如上所述,当我在我的 Django 应用程序上运行 PyInstaller 时,我遇到了一些需要解决的问题。
- 每当我运行新的可执行文件时,控制台都会提示“找不到模块”错误。 Here is my solution对这些错误。我最终不得不添加比我的答案显示更多的隐藏导入。请求,你就会得到。
- PyInstaller 应该打包所有模板(html 文件),但它没有。我必须手动将所有文件添加到
dist\myAppName\django\contrib\admin\templates
文件夹。
- PyInstaller 还应该获取您使用的所有外部模块,但它没有。要使用缺少的模块,我必须从下载模块的位置获取模块的文件夹,然后手动将其添加到我的
dist/myAppName
文件夹中。只需将其粘贴到那里就可以了。
- PyInstaller 也应该删除未使用的导入,但它没有。我必须在我的 .SPEC 文件中的
excludes
列表中添加很多模块,这样我的 dist 文件夹就不会很大。
如果您的 PyInstaller 体验比我的好,请告诉我。我认为我的问题可能是个别情况。