2013-02-11 81 views
1

我正在写一个小型的Web应用程序,我想包括下载本身的能力。理想的解决方案是让用户能够“点击安装”完整的应用程序,但应用程序的用户将能够下载它的一个版本来使用它们自己(也许具有减少的功能或没有一些不太重要的依赖关系) 。Python网络应用程序,可以下载本身

我正在使用Bottle,因为我希望尽可能地使所有内容尽可能地靠近标准库。用户可能处于不同的平台或Python版本,这是减少额外模块使用的其他原因。 (尽管我会假设无论平台是2.7还是3.3都会使用)。

我目前的想法是让应用程序使用__file__或类似的和自我压缩。它也可以使用setuptools/distribute并自己调用sdist。用户然后可以执行该zip文件,或者使用源代码发布来安装应用程序。 (理想情况下,我想提供这两个选项)。

该应用程序将包括积极的导入检查以回退到可用模块,Bottle是唯一的要求(并且将包括在下载的文件中)。

任何人都可以想到一个强大的方法来提供这种功能?

更新:应用程序的用户无法保证随时都能访问互联网,因此需要能够从以前安装它的人那里下载应用程序的版本。也不能假定Python的体验,因此让用户运行python -m myApp.zip来运行他们自己的版本的想法。

更新二:由于python的体验水平也无法保证,我希望最简单的方式让用户获得一个主要工作版本的应用程序。有经验的用户可以自由地通过安装他们自己选择的附加模块来“升级”应用程序。绝大多数这些将是不同的服务器来承载从(CherryPy,扭曲等)的应用程序,因此不会严格地被视为一个依赖项,而是一个“很高兴有”。

更新III:根据以下答案,我将研究一个基于PyPI/buildout的解决方案,但仍会对是否存在针对上述方法的特定解决方案感兴趣。

回答

3

只是打包你的应用程序,并把它放在PyPI上。尝试自动打包运行在服务器上的代码似乎过度设计。然后你可以让人们使用点子来安装你的应用程序。在您的应用中,提供一个指向PyPI页面的链接。

然后你也可以在setup.py中添加依赖关系,并且pip会为你安装它们。看起来你正在试图建立你自己的包装基础设施,但不一定。使用那里的东西。

+0

问题在于,应用程序的用户通常会在没有互联网访问的环境中工作。虽然具有完全访问权限的用户可以从PyPI进行pip安装,但我希望用户能够尽可能轻松地获取版本,前提是他们无法访问PyPI。 – Lllama 2013-02-11 17:38:07

+0

如果您为PyPi构建&部署,PyPi只是托管一个sdist。就像Ned所说的那样,除了任何依赖之外,你可以链接到那个sdist(你可以托管)。 --- 你也可以为Linux/Win/Mac制作可执行文件。 StackOverflow上有很多答案。开始阅读这一个... http://stackoverflow.com/questions/106725/how-to-bundle-a-python-application-including-dependencies-for-windows ---如果你想包括依赖关系常用术语是“捆绑”(应该有助于您的搜索)。我认为这个项目可能适合你http://www.buildout。org – 2013-02-11 17:52:24

+0

如果我可以将sdist包含在从PyPI下载的sdist中,那么我可以从应用程序中启动sdist。我也可以包含不同平台的可执行文件。捆绑也可以是一种选择(并给我一个学习构建的机会)。 – Lllama 2013-02-11 18:07:56

相关问题