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
