web-dev-qa-db-ja.com

pythonアプリケーションをpip-installableにパッケージ化するにはどうすればよいですか?

Django暇なときに、仕事中の貧弱な競争のためにアプリケーションを書いています。この時間を賢く使用して、virtualenvの速度を上げることにしました。 、pip、packageing、Django 1.3、および簡単に再配布可能なアプリケーションを作成する方法。これまでのところ、とても良い。

私は包装の部分までです。たとえば、GitHubの多くのDjangoアプリはほとんど(ほぼ)同じ方法でバンドルされています。例として Django-uni-forms を使用します。

私がしている仮定は、MANIFEST.inおよびsetup.pyは、pipがその仕事をするのに必要な唯一のピースです。あれは正しいですか?私の仮定が間違っている場合、他にどのようなコンポーネントが必要ですか?

必要なパッケージファイルは通常生成されますか、それとも手作業で作成されますか?依存関係を記述してからインストールすることもできますか?私のアプリケーションはDjango-uni-forms、およびrequirements.txt依存関係のインストールに使用したアプリ内のファイル。しかし、それは包装システムが面倒を見ることができるものですか?

Pipがアプリケーションと依存関係をインストールできるようにアプリケーションをパッケージ化するために従う必要がある手順は何ですか?

95
Josh Smeaton

はい、MANIFEST.insetup.pyで十分です。

このブログ投稿には、このトピックに関するいくつかの良い情報があります: Packaging a Django reusable app

そして、ここに私を大いに助けたもう一つの良い、詳細な概要があります: Python Packaging User Guide

特に、静的ファイル(テンプレート)を含めるためのヒントは、最初は明らかではない可能性があるため重要です。

はい、アプリのインストール時に自動的に取得される必要なパッケージをsetup.pyで指定できます。

例えば:

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

現在、依存関係が定義されている2つの場所がありますが、必ずしもこれらの情報が重複しているわけではありません: setup.py vs requirements.txt

このセットアップでは、 pip を介してパッケージをインストールできる必要があります。


Pierreがコメントで述べたように、Djangoの公式ドキュメントには関連するセクションがあります: Packaging your app

そして、この「完全に不完全な」ガイドがあります。これは、パッケージ化とパッケージのPyPIへのアップロードに関する素晴らしい概要を提供します: Sharing Your Labor of Love:PyPI Quick And Dirty

88
arie