4

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

所以我在想象这样一个场景:

  1. 用户下载 .zip 文件
  2. 在结果打开的文件夹中,用户单击 index.html
  3. 在浏览器中打开
  4. 主干应用程序启动,将数据存储在localStorage
  5. 然后用户可以导出为 CSV。

信不信由你,这将解决我的问题:我想帮助用户在浏览器中编辑数据,然后以熟悉的格式将其取回(例如,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 中没有收到该错误,并且.jsor.json文件加载正常。)

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

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

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

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

蒂亚!

4

3 回答 3

2

You can use Anthony Gordon McMillan’s Pyinstaller or Tuininga’s cx_Freeze

Quoting the PyInstaller website:

Features

Packaging of Python programs into standard executables, that work on computers without Python installed.

Multiplatform: works under

  • Windows (32-bit and 64-bit),
  • Linux (32-bit and 64-bit),
  • Mac OS X (32-bit only, 64-bit in git, see Features/MacOsCompatibility) and experimentally Solaris and AIX (in git).

Multiversion: works under any version of Python from 2.2 up to 2.7.

于 2012-04-18T04:31:52.250 回答
2

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

这个 SO 答案应该可以帮助您入门。

阅读您更新的问题后,我认为像猫鼬这样的东西可能更适合您的任务。它是一个可嵌入的 Web 服务器,它是 FLOSS 并具有 python 绑定。烧瓶可能是矫枉过正。

于 2012-04-18T04:25:47.697 回答
1

Not easily. On Windows, you'd have to include Python itself. Mac and Linux usually have Python installed, but you can't be sure of what version so it's often easier to bundle your specific Python for them as well. Then you'd have to include all the dependencies that you want to run with in your package or be able to install them with pip, easy_install, etc.

You can use py2app and py2exe. This won't be cross-platform as you'll still need to make a different version for each target OS. The only way to make it cross-platform is to bundle all versions and have some cross-platform code execute the appropriate version for that platform.

If you need databases like MySQL or even SQLite things get more complicated as you'll have to include those too.

于 2012-04-18T04:29:37.303 回答