# Python モジュールの配布

Email: | distutils-sig@python.org

人気のあるオープンソース開発プロジェクトがそうであるように、Python には貢献者たちとユーザたちの活発なサポートコミュニティがあり、またこれらはほかの Python 開発者たちに、彼らのソフトウェアのオープンソースライセンスのもとでの利用も可能にしてくれています。

これはほかの人が既に挙げた共通の(あるいは時折極めて稀有な!)問題や、彼ら自身の解法による潜在的な貢献が共通の場所に蓄えられることによる恩恵によって、Python ユーザに共有と協調を効果的に行なうことの助けとなっています。

このガイドはこれらプロセスのうち、配布についてをカバーします。ほかの Python プロジェクトをインストールするためのガイドについては installation guide を参照してください。

注釈

あなたが企業や組織のユーザであれば、多くの組織がオープンソースソフトウェアの利用と貢献に関する彼ら独自のポリシーを持っていることに気をつけてください。Python によって提供される配布とインストールのツールを利用する際には、そのようなポリシーを考慮に入れてください。

## 重要用語集

- Python Packaging Index は Python パッケージのパブリック・リポジトリです。このリポジトリのパッケージは、他の Python ユーザが利用できるように、オープンソースでライセンスされています。
- Python Packaging Authority は、標準のパッケージングツール、関連するメタデータとファイルフォーマット標準の保守と発展を担っている、開発者・ドキュメントの著者のグループです。彼らは様々なツールやドキュメント、issue tracker を GitHub と BitBucket の両方で管理しています。
- `distutils` はオリジナルのビルド・配布システムで、 Python 標準ライブラリに 1998 年に最初に追加されました。 `distutils` の直接的な利用は段階的に取り払われていきますが、それは今でも現時点でのパッケージングと配布のインフラストラクチャの基礎として鎮座していて、標準ライブラリの一部として残っているだけでなく、その名前はほかの文脈でも生き続けています(Python のパッケージング標準の開発をまとめるのに使われているメーリングリストの名前のように)。
- setuptools は 2004 年に最初に公開された、 `distutils` に対する(とても大きな)取り外し容易な置き換えです。その、未修正の `distutils` に対する最も顕著な機能追加は、他のパッケージへの依存関係を宣言できることでした。これは今では `distutils` よりももっと定期的に更新される代替品として推奨されていて、もっと最新の、Python バージョンの広範囲に渡るパッケージングの標準についての一貫したサポートを提供しています。
- wheel (このドキュメントの文脈では) `distutils`/setuptools に `bdist_wheel` コマンドを追加するプロジェクトです。これは、それがバイナリの拡張を含んでいようと、Python ライブラリをローカルでビルドする必要性なしでシステムにインストール出来るようにする、クロスプラットフォームのバイナリのパッケージング形式("wheels" または "wheel files" と呼ばれ、 PEP 427 で定義されています)を生成します。

## オープンソースライセンス化とコラボレーション

世界のほとんどの国では、ソフトウェアは自動的に著作権保護の対象となります。これが意味するのは、ほかの開発者はそのソフトウェアに関する複製、使用、修正と配布に対して、明示的な許諾を必要とする、ということです。

オープンソースライセンス化は、比較的矛盾のなく明示的にそのような権限を許可する方法です。さまざまな問題に対する共通の解法をいつでも利用可能にすることで、開発者に共有と協調を効率的に行うことを可能にしています。これは多くの開発者に、彼ら固有の状況での比較的特異な問題により多くの時間をかけて集中することを可能にしてくれています。

Python によって提供される配布ツールは、開発者とってそれなりに直接的になるようデザインされていて、そうすべく選択する限り、彼ら自身の貢献をそのソフトウェアの共通の蓄積場所に還元出来ます。

それがオープンソースとして公開されているかどうかによらず、同じ配布ツールを組織内のソフトウェア配布に使うことも出来ます。

## ツールのインストール

コア開発チームは、古いバージョンの Python に対してでさえも一環して動作する標準ツールを持つことが重要だということを理解したため、標準ライブラリには、モダンな Python パッケージング標準をサポートするビルドツールは含まれていません。

現在のところのビルド・配布の推奨ツールは `pip` モジュールをコマンドラインから呼び出すことでインストール出来ます:

    python -m pip install setuptools wheel twine

注釈

POSIX ユーザ(Max OS X と Linux ユーザを含みます)向けには、このガイド内の指示は、 virtual environment の利用を前提にしています。

Windows ユーザ向けには、このガイド内の指示は、Python インストール時にシステムの PATH 環境変数が調整されていることを前提にしています。

Python Packaging User Guide にはさらに詳しい情報 currently recommended tools があります。

## ガイドを読む

Python Packaging User Guide は、プロジェクトの作成に関わる様々な鍵となるステップと要素をカバーしています。

- Project structure
- Building and packaging the project
- Uploading the project to the Python Packaging Index

## どうすればいいの...？

以下はよくある課題への簡単な回答もしくは回答へのリンクです。

### ... 私のプロジェクトの名前はどう選べばいいですか?

簡単なトピックではありませんが、いくつか助言をしておきます:

- Python Packaging Index にその名前が既に使われていないかをチェックする
- GitHub, BitBucket などのような人気のあるホスティングサイトにその名前が既にいないかチェックする
- 検討している名前について WEB 検索で現れるのをチェックする
- とりわけ一般的な語、特に多くの意味を持ち、ユーザにあなたのソフトウェアを検索するのを難しくさせるような語を避ける

### ... バイナリの拡張を作って配布したいのですが?

これは大変複雑なトピックで、あなたが何を達成したいのかに完全に依存する、数多くの選択肢があります。Python Packaging User Guide にはもっと詳しい情報と提案がありますので、ご参照ください。

参考

Python Packaging User Guide: Binary Extensions