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
