有没有一种简单的方法将Flask服务器作为可执行文件分发?

时间:2012-04-18 04:19:47

标签: python backbone.js executable flask

我正在使用Backbone.js构建一些简单的编辑器,我希望能够将它们作为应用程序分发给用户以主要以客户端方式编辑内容(即,我不希望用户不得不设置像MySQL或Apache这样的东西。

所以我想象一个场景:

  1. 用户下载.zip文件
  2. 在生成的已打开文件夹中,用户单击index.html
  3. 在浏览器中打开
  4. Backbone应用程序启动,将数据存储在localStorage
  5. 然后,用户可以导出为CSV。
  6. 信不信由你,这将解决我的问题:我想帮助用户在浏览器中编辑数据,然后以熟悉的格式将其恢复(例如,CSV可以加载到Excel中)。

    我想在不强制他们配置服务器的情况下这样做。看起来这在HTML5堆栈中几乎是可能的。但是,在至少一个浏览器(Chrome)中,这不起作用,因为我收到类似这样的错误:

    XMLHttpRequest cannot load file:///users/me/project/data/Appdata.json. Origin null is not allowed by Access-Control-Allow-Origin.
    

    (奇怪的是,我在Firefox中没有收到该错误,并且.js.json文件加载正常。)

    所以在这一点上,在我看来,没有办法让这些用户使用某种本地服务器来提供Backbone接口。

    所以,我正在试图弄清楚如何构建一个可分发的跨平台可执行文件,允许我的用户启动Flask服务器。 (我希望为Backbone.js应用程序构建一个REST后端。)

    这是一厢情愿的想法吗?我假设我可以让相关人员安装Python。

    这可行吗?似乎有很多方法可以打包Python程序,(pyinstaller?py2exe?...)所以我想我会问这里以防有人知道我想到的堆栈的解决方案。

    TIA!

3 个答案:

答案 0 :(得分:2)

我的建议是在代码周围创建一个瘦服务包装器。这将允许服务器独立于主代码库运行 - 也允许用户直接关闭服务器(只需右键单击服务图标并选择“退出”)。

This SO answer应该可以帮助您入门。

在阅读更新后的问题后,我认为mongoose之类的内容可能更适合您的任务。它是一个可嵌入的Web服务器,它是FLOSS并具有python绑定。烧瓶可能有点矫枉过正。

答案 1 :(得分:2)

您可以使用Anthony Gordon McMillan’s PyinstallerTuininga’s cx_Freeze

引用PyInstaller网站:

  

功能

     

将Python程序打包成可用的标准可执行文件   未安装Python的计算机。

     

多平台:在

下工作      
      
  • Windows(32位和64位),
  •   
  • Linux(32位和64位),
  •   
  • Mac OS X(仅限32位,git为64位,请参阅功能/ MacOs兼容性)和   实验性的Solaris和AIX(在git中)。
  •   
     

Multiversion:适用于从2.2到2.7的任何Python版本。

答案 2 :(得分:1)

不容易。在Windows上,您必须包含Python本身。 Mac和Linux通常都安装了Python,但是你不能确定它是什么版本,因此通常也可以更容易地为它们捆绑特定的Python。然后,您必须包含要在包中运行的所有依赖项,或者能够使用pip,easy_install等安装它们。

您可以使用py2apppy2exe。这不是跨平台的,因为您仍需要为每个目标操作系统制作不同的版本。使其跨平台的唯一方法是捆绑所有版本,并让一些跨平台代码执行该平台的相应版本。

如果您需要像MySQL甚至SQLite这样的数据库,事情会变得更复杂,因为您也必须包含这些数据库。