我正在业余时间写一个django应用程序,用于我们在工作中进行的小费小费比赛。我认为我会明智地利用这段时间,并加快virtualenv,pip,packaging,django 1.3的速度,以及如何编写一个易于重新分发的应用程序。到目前为止,非常好。
我喜欢包装部分。例如,GitHub上的许多django应用程序大多以相同的方式捆绑(大致)。我将以django-uni-forms为例。
我正在做的一个假设是,MANIFEST.in
和setup.py
是pip需要完成其工作的唯一必需部分。那是对的吗?如果我的假设是错误的,还需要哪些其他组件?
是否通常会生成所需的包装文件,还是手工制作?是否可以描述依赖关系并进行安装?我的应用程序依赖于django-uni-forms
,我将它列在我的应用程序中的requirements.txt
文件中,我用它来安装依赖项;但这是包装系统可以照顾的东西吗?
我需要遵循哪些步骤来打包我的应用程序,以便pip能够安装它和任何依赖项?
答案 0 :(得分:88)
是的,MANIFEST.in
和setup.py
就足够了。
这篇博文真的有关于这个主题的一些很好的信息: Packaging a Django reusable app
这是另一个很好的,详细的概述,对我有很大帮助: Python Packaging User Guide
特别是包含静态文件(模板)的提示非常重要,因为这可能一开始并不明显。
是的,您可以在setup.py
中指定在安装应用时自动提取的所需包。
例如:
install_requires = [
'django-profiles',
'django-uni-forms',
],
显然现在我们有两个地方定义了依赖关系,但这并不一定意味着这些信息是重复的:setup.py vs requirements.txt
使用此设置,您的包应该可以通过pip
安装。
皮埃尔在评论中指出,现在Django官方文档中也有相关部分:Packaging your app
然后有这个“完全不完整”的指南,它真的很好地概述了打包并将包上传到PyPI:Sharing Your Labor of Love: PyPI Quick And Dirty