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 は "distutils" (の大部分)をまるごと置き換える後継プロジェ
  クトで、2004 年に最初に公開されました。未修正の "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
