如何打包 python 应用程序以使其可 pip 安装?

Posted

技术标签:

【中文标题】如何打包 python 应用程序以使其可 pip 安装?【英文标题】:How do I package a python application to make it pip-installable? 【发布时间】:2011-07-18 16:01:00 【问题描述】:

我在业余时间编写了一个 django 应用程序,用于我们在工作中举办的足球小费比赛。我想我会明智地利用这段时间,并快速了解 virtualenv、pip、打包、django 1.3 以及如何编写一个易于再分发的应用程序。到目前为止,一切顺利。

我负责包装部分。例如,GitHub 上的许多 django 应用程序大多(大致)以相同的方式捆绑在一起。我以django-uni-forms 为例。

我做的一个假设是 MANIFEST.insetup.py 是 pip 完成其工作所需的唯一部分。那是对的吗?如果我的假设是错误的,还需要哪些其他组件?

所需的打包文件一般是生成的,还是手工制作的?可以描述依赖关系然后安装吗?我的应用程序依赖于django-uni-forms,我将它列在我的应用程序中的requirements.txt 文件中,我曾经使用它来安装依赖项;但这是包装系统可以处理的事情吗?

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

【问题讨论】:

【参考方案1】:

是的,MANIFEST.insetup.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 安装。


正如 Pierre 在 cmets 中指出的,现在 Django 的官方文档中也有一个相关部分:Packaging your app

然后是这个“完全不完整”的指南,它确实很好地概述了打包和上传包到 PyPI:Sharing Your Labor of Love: PyPI Quick And Dirty

【讨论】:

官方文档中现在也有解释How to package a Django app的部分

以上是关于如何打包 python 应用程序以使其可 pip 安装?的主要内容,如果未能解决你的问题,请参考以下文章

从 Play 商店更新我的应用程序后,如何在 Android 上保存 QSettings 文件的内容以使其可读?

如何调整 sklearn 中 plot_tree 图的大小以使其可读?

javascript 在元素周围添加锚标记以使其可单击

jquery-select2 - 将 select2 添加到现有的下拉代码中以使其可搜索

Python:concurrent.futures 如何使其可取消?

如何在 C# List 中存储 IP 地址列表以使其也可搜索子网?