如何打包一个Python应用程序以使其可以通过pip进行安装?

96

我业余时间正在编写一个django应用程序,用于我们在工作中运行的足球竞猜比赛。我认为我可以利用这段时间,快速了解virtualenv、pip、打包、django 1.3以及如何编写易于再发布的应用程序。到目前为止,一切顺利。

我已经进行到了打包部分。例如,GitHub上的许多django应用程序基本上是以相同的方式绑定在一起的。我将使用 django-uni-forms 作为示例。

我做出的假设是,MANIFEST.insetup.py 是pip需要完成其工作所需的唯一必要组件。这是正确的吗?如果我的假设是错误的,还需要哪些其他组件?

通常打包文件是手动制作的,还是会自动生成?是否可以描述并安装依赖项?我的应用程序依赖于 django-uni-forms ,我在我的应用程序中列出了一个 requirements.txt 文件,用于安装依赖项;但是这是包装系统可以处理的吗?

我需要遵循哪些步骤来打包我的应用程序,以便pip能够安装它和任何依赖项?

1个回答

89

是的,MANIFEST.insetup.py应该就足够了。

这篇博客文章真的提供了一些关于此主题的好信息: 打包Django可重用应用程序

这里还有另一篇很好、详细的概述,对我帮助很大: Python Packaging用户指南

特别是将你的静态文件(模板)包含在内的提示非常重要,因为这可能一开始并不明显。

而且,你可以在setup.py中指定需要的软件包,在安装应用程序时自动获取。

例如:

    install_requires = [
        'django-profiles',
        'django-uni-forms',
    ],

显然我们现在有两个地方定义依赖关系,但这并不一定意味着这些信息是重复的: setup.py vs requirements.txt

使用这个设置,您的软件包应该可以通过pip进行安装。


正如Pierre在评论中指出的那样,Django官方文档现在也有一个相关章节: 打包你的应用程序

然后还有这篇“完全不完整”的指南,它真的很好地概述了如何打包并将软件包上传到PyPI: 分享你的心血:PyPI 快速简明指南


4
现在官方文档中有一部分讲解如何打包Django应用程序,链接为:https://docs.djangoproject.com/en/dev/intro/reusable-apps/#packaging-your-app。请你将其翻译为通俗易懂的中文版本,不要改变原意。 - Pierre de LESPINAY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接