Django应用程序Heroku上的条件pip安装要求



让我首先说,我认为没有办法做到这一点。。。但是,外面有很多聪明的人,所以我想我会问!:)

我发现RandallDegges写了一篇关于在Heroku上建立Django应用程序的好文章/帖子(互联网档案链接)。我真的很喜欢他说的把你的需求分解成不同的文件(common.txt,dev.txt,prod.txt等)。

这在Heroku上非常适用于生产,但我也在Heroku上维护了一个Dev/QA网站,我有一些包不是我真正需要的,我确实在Dev/QA中使用。最好的例子是django调试工具栏。目前,我的production requirements.txt中确实有这个,我在运行时通过查看DEBUG设置来动态决定是否需要将它添加到settings.py中安装的应用程序等中。

这很好。。。但是,如果我甚至不用麻烦在prod中安装它,那就太好了。我想我希望pip能够获取一个允许conditionals-includes的需求文件(为什么不能只获取python文件?)或者Heroku支持一个配置设置,告诉它要使用哪个需求文件。有人找到实现这一目标的方法吗?还是只是一厢情愿?

您对此进行了调查吗?

如果您的Python应用程序包含setup.py文件,但不包含requirements.txt文件,则将使用Python setup.py develop安装您的包并解决您的依赖关系。这与分发工具或安装工具配合使用效果最佳。直接使用distutils的项目将被安装,但不会被链接。在版本发生变化之前,模块不会得到更新。如果你已经有了一个需求文件,但想利用这个功能,你可以在你的需求文件中添加以下内容:

-e .

然后按照python2.6 上有条件安装importlib中的建议

我在构建中也有类似的需求,并在那里实现了它。现在我正在从buildout迁移到pip,我提出了这个脚本来使用一些基于某些条件的各种需求文件,这些文件可以基于os/arch或一些环境变量或任何你喜欢的东西。粗糙但对我有效。

请参阅https://gist.github.com/pombredanne/72130ee6f202e89c13bb

是的,这是一厢情愿的想法。pip需求文件非常简单。从字面上看,pip所做的只是在文件中的每一行前面加上pip install,所以条件语句之类的是不可行的。为每个环境提供单独的需求文件是一个不错的主意,但问题是为什么不为您的Dev/QA站点提供一个版本呢?

也就是说,我认为这一切无论如何都有点学术性。简单地安装一个软件包不会有任何伤害。例如,即使在生产中也安装了django调试工具栏包,这并不重要,您的生产实例实际上不会使用,所以除了占用几千字节的驱动器空间外,这也不是问题。

就我个人而言,我总是只有一个需求文件,在那里,我只放了需求,即这些包是网站无法运行的。像django调试工具栏、ipython等,我只是在需要的时候手动安装。