2012-12-27 17 views
5

我想创建一个webapp(基于瓶)的python包,我想获得一些已安装在已知目录中的文件。如何正确打包瓶子应用程序与静态文件

例如,在运行集成服务器(基于粘贴)时,瓶子会尝试查找当前包内的templatesstatic目录。但在制作中,我宁愿将这些目录安装在更具体的位置,如virtualenv/share/package-name/{static,templates}。否则,他们会在lib/python-2.x/...之下,看起来不合适。

我试图使用setup.py中的data_files参数安装文件,但这对整棵树(error: can't copy 'xxx': doesn't exist or not a regular file)似乎并不有用。

这种情况下的正确解决方案是什么?

+0

这帮了我很多打包我的烧瓶应用程序:http://flask.pocoo.org/docs/patterns/distribute/#basic-setup-script –

+0

我见过它。不幸的是,他们只是复制包和数据文件。我现在正在做,但我真的很想停下来。我真的不喜欢把我的webserver指向'/ home/xxx_webapp/venv/lib/python2.7/site-packages/xxx-1.0dev-py2.7.egg/xxx/static /'。我宁愿使用类似'/ home/xxx_webapp/venv/share/xxx/static /' – viraptor

+0

的东西你为什么要用除了功能瓶提供的其他东西来提供静态文件? –

回答

3

你可以做的是将你的虚拟环境和静态文件打包成本地包(.deb或.rpm),然后你可以将它们放在你想要的任何地方。我在这个here上写了一篇博文。它采用所谓的fpm一个方便的小红宝石宝石,虽然我不从我的Python包,单独我的静态文件,你将能够通过像这样

fpm -s dir -t deb -n food-truck -v 0.1 -d "python,python-dev,postgresql" /home/ubuntu/food_truck-build/=/home/ubuntu/foodtruck.com <path to static files>=<destination of static files> 

你可以使用添加上fpm命令结束另一个路径映射fpm来指定其他配置文件,比如你的nginx配置等等。但那取决于你,可能意味着你的部署灵活性稍差。

希望有帮助!

-1

Python的包装实用程序不是为此设计的。将静态文件复制到nginx或Apache的站点根目录将是部署脚本的任务,可以使用Fabric来编写。

相关问题