現在地: ホーム ‣ Dive Into Python 3 ‣
難易度: ♦♦♦♦♢
❝ 恥は痛みと同じようなもの。どちらも一度しか感じない。❞
— メルトイユ侯爵夫人、危険な関係
真のアーティストは出荷する — スティーブ・ジョブズはそんなことを言っている。Pythonのスクリプト、ライブラリ、フレームワーク、アプリケーションをリリースしたいだって? 素晴らしい。世界はより多くのPythonコードを求めている。Python 3にはDistutilsと呼ばれるパッケージング用のフレームワークが付属している。このDistutilsはたくさんのものがつまったライブラリだ — (あなたのための)ビルドツール、(ユーザのための)インストールツール、(検索エンジンのための)パッケージのメタデータの形式、などなど。さらに、Distutilsは、オープンソースのPythonライブラリのための中央リポジトリである Python Package Index (“PyPI”) に統合されている。
このようなDistutilsの様々な面の中核にあるのが「セットアップスクリプト」だ(このスクリプトは伝統的にsetup.py
と呼ばれている)。実際、既に本書の中で何度かDistutilsセットアップスクリプトを目にしている。HTTPウェブサービスの章ではhttplib2
をインストールするためにDistutilsを使用したし、ケーススタディ: chardet
をPython 3へ移植するの章でchardet
をインストールするときにも利用した。
この章では、chardet
とhttplib2
のセットアップスクリプトがどのような仕組みで動いているのかを説明するが、その解説はそのままPythonソフトウェアをリリースするための手引きになっている。
# chardetのsetup.py
from distutils.core import setup
setup(
name = "chardet",
packages = ["chardet"],
version = "1.0.2",
description = "Universal encoding detector",
author = "Mark Pilgrim",
author_email = "mark@diveintomark.org",
url = "http://chardet.feedparser.org/",
download_url = "http://chardet.feedparser.org/download/python3-chardet-1.0.1.tgz",
keywords = ["encoding", "i18n", "xml"],
classifiers = [
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Development Status :: 4 - Beta",
"Environment :: Other Environment",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
"Operating System :: OS Independent",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Text Processing :: Linguistic",
],
long_description = """\
Universal character encoding detector
-------------------------------------
Detects
- ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
- Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
- EUC-JP, SHIFT_JIS, ISO-2022-JP (Japanese)
- EUC-KR, ISO-2022-KR (Korean)
- KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
- ISO-8859-2, windows-1250 (Hungarian)
- ISO-8859-5, windows-1251 (Bulgarian)
- windows-1252 (English)
- ISO-8859-7, windows-1253 (Greek)
- ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
- TIS-620 (Thai)
This version requires Python 3 or later; a Python 2 version is available separately.
"""
)
☞
chardet
とhttplib2
はオープンソースだが、Pythonライブラリを何か特定のライセンスでリリースしなければならないという制約は存在しない。この章で説明する手順は、ライセンスに関係なく、どんなPythonのソフトウェアにも使える。
⁂
初めてのPythonパッケージをリリースする作業は手ごわいものだ(2つ目は少し簡単になる)。Distutilsはできる限りの自動化を試みてくれるが、自分自身でやらなければいけないこともいくつか存在する。
⁂
Pythonソフトウェアのパッケージ化を始めるには、ファイルとディレクトリを整理する必要がある。httplib2
ディレクトリは以下のようになる:
httplib2/ ① | +--README.txt ② | +--setup.py ③ | +--httplib2/ ④ | +--__init__.py | +--iri2uri.py
.txt
という拡張子を付け、さらにWindowsスタイルの改行文字を使っておこう。自分はコマンドラインから起動する独自のマクロ言語を備えたクールなテキストエディタを使っているからといって、ユーザーの人生を難しくする必要はない(ユーザは「メモ帳」を使っている。悲しいけれどこれは事実だ)。あなたがLinuxやMac OS Xを使っているとしても、そのクールなテキストエディタには、まず間違いなくファイルをWindowsスタイルの改行文字で保存するオプションがある。
setup.py
という名前を付けておくべきだ。そして、おそらく「もっともな理由」など無いだろう。
.py
ファイルで構成されているのであれば、そのファイルは“read me”ファイルやセットアップスクリプトと一緒にルートディレクトリに置いておけばいい。しかし、httplib2
は単一の.py
ファイルではない。httplib2
はマルチファイルモジュールなのだ。しかしそれでも問題はない! ルートディレクトリの中にhttplib2
ディレクトリを置こう。つまり、httplib2/
というルートディレクトリの中にあるhttplib2/
ディレクトリの中に__init__.py
ファイルがあることになる。これで問題ない。実は、これによってパッケージ化の処理が単純化されるのだ。
chardet
ディレクトリの方はこれとは微妙に異なっている。httplib2
と同じくchardet
はマルチファイルモジュールなので、chardet/
というルートディレクトリの中にchardet/
ディレクトリが存在する。しかし、chardet
の場合は、README.txt
ファイルに加えてHTML形式のドキュメントがdocs/
ディレクトリの中に用意されているのだ。このdocs/
ディレクトリには、.html
ファイルや.css
ファイルがいくつか入っており、さらにimages/
というサブディレクトリの中には複数の.png
ファイルや.gif
ファイルも入っている(これは後で重要になる)。また、(L)GPLでライセンスされたソフトウェアの慣例として、LGPLの全文を収めたCOPYING.txt
というファイルも入っている。
chardet/
|
+--COPYING.txt
|
+--setup.py
|
+--README.txt
|
+--docs/
| |
| +--index.html
| |
| +--usage.html
| |
| +--images/ ...
|
+--chardet/
|
+--__init__.py
|
+--big5freq.py
|
+--...
⁂
DistutilsのセットアップスクリプトはPythonスクリプトだ。このスクリプトは理論的にはPythonができることなら何でもできる。しかし実際には、このスクリプトでは最小限の処理を可能な限り標準的な方法で行うべきだ。セットアップスクリプトは退屈なものであるべきなのだ。インストール処理をエキゾチックなものにすれば、エキゾチックなバグレポートが返ってくることになるだろう。
どんなDistutilsセットアップスクリプトだろうと、1行目は常に同じものになる:
from distutils.core import setup
これはsetup()
関数をインポートしている。この関数がDistutilsのメインのエントリポイントだ。すべてのDistutilsセットアップスクリプトのうちの95%はsetup()
の呼び出しだけで構成されており、他には何も含んでいない(この統計は単なるでっち上げだが、Distutilsのセットアップスクリプトが、Distutilsのsetup()
関数を呼び出す以上のことをするのであれば、何かそれ相応の理由を持っているべきだ。そんな理由を持っているだろうか? 私はそう思わなかった)。
setup()
関数は何十ものパラメータを受け取ることができる。これに関わるすべての人を正気に保つために、すべてのパラメータには名前付き引数を使わなければならない。これは単なる慣例ではなく、コード上要求されている条件だ。従って、名前付き引数を使わずにsetup()
関数を呼び出そうとすると、セットアップスクリプトはクラッシュする。
次の名前付き引数は必須だ:
必須ではないが、以下もセットアップスクリプトに含めておくことを推奨する:
☞セットアップスクリプトのメタデータはPEP 314で定義されている。
では、chardet
のセットアップスクリプトを見てみよう。ここでは先ほど説明した必須/推奨のパラメーター全部に加えて、さらにもう一つ、まだ言及していなかったpackages
というパラメータを使っている。
from distutils.core import setup
setup(
name = 'chardet',
packages = ['chardet'],
version = '1.0.2',
description = 'Universal encoding detector',
author='Mark Pilgrim',
...
)
packages
パラメータは、配布プロセスにおける用語の不幸な重複を浮き彫りにする。私たちは、いま構築しているものを「パッケージ」と呼んできた(そして、これがPythonの「パッケージ」インデックスに登録されるわけだ)。しかし、このpackages
パラメータが指しているものはそれとは違う。これは、chardet
モジュールがマルチファイルモジュール(これは時に……「パッケージ」と呼ばれる)であるという事実を指しているのだ。このpackages
パラメータは、chardet/
ディレクトリ、__init__.py
ファイル、そしてchardet
モジュールを構成するすべての.py
ファイルをビルドに加えるようにDistutilsに伝える。これは重要だ。もし実際のソースコードを入れ忘れてしまったら、ドキュメントやメタデータの話はすべて無意味なものになってしまうからだ。
⁂
Python Package Index (“PyPI”) には何千ものPythonライブラリが存在している。適切な分類用メタデータを用意しておけば、他の人々があなたのライブラリを簡単に見つけられるようになるだろう。PyPIは、分類タグをもとにパッケージを探せるようになっていて、分類タグをいくつか選んで絞り込みをかけることもできる。分類タグは無視できるような見えないメタデータではないのだ!
ソフトウェアを分類するには、classifiers
パラメータをDistutilsのsetup()
関数に渡せばよい。classifiers
は文字列のリストだが、この文字列は自由形式ではない。すべての分類タグはPyPIのこのリストにあるものを使う必要がある。
分類タグはオプションなので、Distutilsのセットアップスクリプトを書く時には全て省略することもできる。しかしそれをやってはいけない。少なくとも次の分類タグは必ず入れておくべきだ。
"Programming Language :: Python"
と"Programming Language :: Python :: 3"
の両方を入れておくべきだ。この2つのタグを抜かすと、パッケージはpypi.python.org
の全ページのサイドバーからリンクされているこの Python 3 互換ライブラリのリストに表示されなくなってしまう。
"Operating System :: OS Independent"
という分類タグを使おう。複数のOparating System
分類タグを書かなければならないのは、ソフトウェアが個々のプラットフォームについて特別なサポートを必要とするときだけだ(これは一般的ではない)。
以下の分類タグも含めておくことを奨める:
Developers
、End Users/Desktop
、Science/Research
、System Administrators
がある。
Framework
タグを付けておこう。そうでないのならこれは省略する。
例を挙げるために、ここにDjangoの分類タグを示す。Djangoは、製品レベルの品質を持ち、クラスプラットフォームで、Webサーバ上で動作する、BSDライセンスのウェブアプリケーションフレームワークだ(DjangoはまだPython 3に対応していないので、Programming Language :: Python :: 3
というタグは含まれていない)。
Programming Language :: Python
License :: OSI Approved :: BSD License
Operating System :: OS Independent
Development Status :: 5 - Production/Stable
Environment :: Web Environment
Framework :: Django
Intended Audience :: Developers
Topic :: Internet :: WWW/HTTP
Topic :: Internet :: WWW/HTTP :: Dynamic Content
Topic :: Internet :: WWW/HTTP :: WSGI
Topic :: Software Development :: Libraries :: Python Modules
次はchardet
の分類タグだ。chardet
は、ケーススタディ: chardet
をPython 3に移植するの章で取り上げている、文字コード自動判定用のライブラリだ。これはベータ版の品質で、クラスプラットフォームで、Python 3互換で、LGPLでライセンスされていて、開発者が自身の製品に組み込んで使うことを想定している。
Programming Language :: Python
Programming Language :: Python :: 3
License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
Operating System :: OS Independent
Development Status :: 4 - Beta
Environment :: Other Environment
Intended Audience :: Developers
Topic :: Text Processing :: Linguistic
Topic :: Software Development :: Libraries :: Python Modules
そして、次はhttplib2
の分類タグだ。これは、HTTPウェブサービスで詳しく見たライブラリだ。httplib2
はベータ版の品質で、クロスプラットフォームで、MITライセンスで、Python開発者を対象としている。
Programming Language :: Python
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
Development Status :: 4 - Beta
Environment :: Web Environment
Intended Audience :: Developers
Topic :: Internet :: WWW/HTTP
Topic :: Software Development :: Libraries :: Python Modules
デフォルトでは、Distutilsは次のファイルをリリースパッケージに入れる:
README.txt
setup.py
packages
パラメータにリストされたマルチファイルモジュールが必要とする.py
ファイル。
py_modules
パラメータにリストされた個々の.py
ファイル。
これでhttplib2
プロジェクトのファイルは網羅できている。しかしchardet
プロジェクトでは、これに加えてCOPYING.txt
ライセンスファイルと、画像やHTMLファイルを収めたdocs/
ディレクトリもパッケージに入れておくつもりだった。このファイルやディレクトリをchardet
のリリースパッケージに追加してもらうには、マニフェストファイルが必要となる。
マニフェストファイルはMANIFEST.in
という名のテキストファイルだ。このファイルをREADME.txt
やsetup.py
ファイルと一緒にルートディレクトリに置こう。マニフェストファイルは、Pythonスクリプトではなく、Distutilsが定義する一連の「コマンド」を並べたテキストファイルだ。マニフェストコマンドを使うことで、特定のファイルやディレクトリをパッケージに含めたり除外したりできる。
これはchardet
プロジェクト用のマニフェストファイル全体だ:
include COPYING.txt ①
recursive-include docs *.html *.css *.png *.gif ②
COPYING.txt
ファイルをパッケージに追加する。
recursive-include
はディレクトリ名と1つ以上のファイル名を受け取る。このファイル名の部分ではファイルを個別に指定するだけではなく、ワイルドカードを使って指定することもできる。この行は「ルートディレクトリの中にdocs/
ディレクトリがあるだろう? その中から.html
・.css
・.png
・.gif
ファイルを(再帰的に)探してほしい。それらをすべてリリースパッケージに入れたいんだ」という意味だ。
すべてのマニフェストコマンドは、プロジェクトディレクトリのディレクトリ構造をそのまま維持する。recursive-include
コマンドが.html
と.png
ファイルをリリースパッケージのルートディレクトリに置くことはない。このコマンドはdocs/
ディレクトリの構造を保ちつつ、このディレクトリの中にあるファイルのうちワイルドカードにマッチしたものだけをパッケージに含める(今まで言っていなかったが、chardet
のドキュメントは、実際にはXMLで書かれており、別のスクリプトによってHTMLに変換されている。私はこのXMLファイルをリリースパッケージに含めずに、HTMLと画像だけを含めておきたいのだ)。
☞マニフェストファイルの形式は独自のものだ。詳しくは、Specifying the files to distributeと、the manifest template commandsを見てほしい。
繰り返すが、マニフェストファイルが必要になるのは、Distutilsがデフォルトでは無視するファイルをパッケージに入れる場合だけだ。マニフェストファイルが本当に必要なら、Distutilsがデフォルトで見つけないファイルやディレクトリだけを書くようにしよう。
把握しておかなければいけないことはたくさんある。Distutilsには、必須なメタデータがセットアップスクリプト中にすべて存在しているかどうかをチェックするための組み込みの検証コマンドが付属している。例えば、version
パラメータを入れ忘れたとしたら、Distutilsがそれを思い出させてくれる。
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py check running check warning: check: missing required meta-data: version
version
パラメータ(とその他の必要なメタデータ全て)を入れると、check
コマンドはこのようになる:
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py check running check
⁂
Distutilsは、複数の種類のリリースパッケージを構築できる。最低でも、ソースコードと、Disturilsのセットアップスクリプトと、“read me”ファイルと、その他任意の追加ファイルを入れた「ソースディストリビューション」を構築すべきだ。ソースディストリビューションを構築するには、Distutilsのセットアップスクリプトにsdist
コマンドを渡せばよい。
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py sdist running sdist running check reading manifest template 'MANIFEST.in' writing manifest file 'MANIFEST' creating chardet-1.0.2 creating chardet-1.0.2\chardet creating chardet-1.0.2\docs creating chardet-1.0.2\docs\images copying files to chardet-1.0.2... copying COPYING -> chardet-1.0.2 copying README.txt -> chardet-1.0.2 copying setup.py -> chardet-1.0.2 copying chardet\__init__.py -> chardet-1.0.2\chardet copying chardet\big5freq.py -> chardet-1.0.2\chardet ... copying chardet\universaldetector.py -> chardet-1.0.2\chardet copying chardet\utf8prober.py -> chardet-1.0.2\chardet copying docs\faq.html -> chardet-1.0.2\docs copying docs\history.html -> chardet-1.0.2\docs copying docs\how-it-works.html -> chardet-1.0.2\docs copying docs\index.html -> chardet-1.0.2\docs copying docs\license.html -> chardet-1.0.2\docs copying docs\supported-encodings.html -> chardet-1.0.2\docs copying docs\usage.html -> chardet-1.0.2\docs copying docs\images\caution.png -> chardet-1.0.2\docs\images copying docs\images\important.png -> chardet-1.0.2\docs\images copying docs\images\note.png -> chardet-1.0.2\docs\images copying docs\images\permalink.gif -> chardet-1.0.2\docs\images copying docs\images\tip.png -> chardet-1.0.2\docs\images copying docs\images\warning.png -> chardet-1.0.2\docs\images creating dist creating 'dist\chardet-1.0.2.zip' and adding 'chardet-1.0.2' to it adding 'chardet-1.0.2\COPYING' adding 'chardet-1.0.2\PKG-INFO' adding 'chardet-1.0.2\README.txt' adding 'chardet-1.0.2\setup.py' adding 'chardet-1.0.2\chardet\big5freq.py' adding 'chardet-1.0.2\chardet\big5prober.py' ... adding 'chardet-1.0.2\chardet\universaldetector.py' adding 'chardet-1.0.2\chardet\utf8prober.py' adding 'chardet-1.0.2\chardet\__init__.py' adding 'chardet-1.0.2\docs\faq.html' adding 'chardet-1.0.2\docs\history.html' adding 'chardet-1.0.2\docs\how-it-works.html' adding 'chardet-1.0.2\docs\index.html' adding 'chardet-1.0.2\docs\license.html' adding 'chardet-1.0.2\docs\supported-encodings.html' adding 'chardet-1.0.2\docs\usage.html' adding 'chardet-1.0.2\docs\images\caution.png' adding 'chardet-1.0.2\docs\images\important.png' adding 'chardet-1.0.2\docs\images\note.png' adding 'chardet-1.0.2\docs\images\permalink.gif' adding 'chardet-1.0.2\docs\images\tip.png' adding 'chardet-1.0.2\docs\images\warning.png' removing 'chardet-1.0.2' (and everything under it)
指摘しておきたいことがいくつかある:
MANIFEST.in
) に気づいている。
COPYING.txt
とdocs/
ディレクトリにあるHTML
ファイルと画像)を追加している。
dist/
というディレクトリを作成したことが分かるだろう。dist/
ディレクトリの中には配布可能な.zip
ファイルがある。
c:\Users\pilgrim\chardet> dir dist Volume in drive C has no label. Volume Serial Number is DED5-B4F8 Directory of c:\Users\pilgrim\chardet\dist 07/30/2009 06:29 PM <DIR> . 07/30/2009 06:29 PM <DIR> .. 07/30/2009 06:29 PM 206,440 chardet-1.0.2.zip 1 File(s) 206,440 bytes 2 Dir(s) 61,424,635,904 bytes free
⁂
私の考えでは、どんなPythonライブラリにもWindowsユーザのためのグラフィカルインストーラを付ける価値がある。このインストーラは(Windowsを使ってない人でも)簡単に作ることができるし、Windowsユーザはこれをありがたく思うだろう。
Distutilsを使えば、グラフィカルなWindowsインストーラを作成できる。この機能を使うにはbdist_wininst
コマンドをDistutilsのセットアップスクリプトに渡せばよい。
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py bdist_wininst running bdist_wininst running build running build_py creating build creating build\lib creating build\lib\chardet copying chardet\big5freq.py -> build\lib\chardet copying chardet\big5prober.py -> build\lib\chardet ... copying chardet\universaldetector.py -> build\lib\chardet copying chardet\utf8prober.py -> build\lib\chardet copying chardet\__init__.py -> build\lib\chardet installing to build\bdist.win32\wininst running install_lib creating build\bdist.win32 creating build\bdist.win32\wininst creating build\bdist.win32\wininst\PURELIB creating build\bdist.win32\wininst\PURELIB\chardet copying build\lib\chardet\big5freq.py -> build\bdist.win32\wininst\PURELIB\chardet copying build\lib\chardet\big5prober.py -> build\bdist.win32\wininst\PURELIB\chardet ... copying build\lib\chardet\universaldetector.py -> build\bdist.win32\wininst\PURELIB\chardet copying build\lib\chardet\utf8prober.py -> build\bdist.win32\wininst\PURELIB\chardet copying build\lib\chardet\__init__.py -> build\bdist.win32\wininst\PURELIB\chardet running install_egg_info Writing build\bdist.win32\wininst\PURELIB\chardet-1.0.2-py3.1.egg-info creating 'c:\users\pilgrim\appdata\local\temp\tmp2f4h7e.zip' and adding '.' to it adding 'PURELIB\chardet-1.0.2-py3.1.egg-info' adding 'PURELIB\chardet\big5freq.py' adding 'PURELIB\chardet\big5prober.py' ... adding 'PURELIB\chardet\universaldetector.py' adding 'PURELIB\chardet\utf8prober.py' adding 'PURELIB\chardet\__init__.py' removing 'build\bdist.win32\wininst' (and everything under it) c:\Users\pilgrim\chardet> dir dist c:\Users\pilgrim\chardet>dir dist Volume in drive C has no label. Volume Serial Number is AADE-E29F Directory of c:\Users\pilgrim\chardet\dist 07/30/2009 10:14 PM <DIR> . 07/30/2009 10:14 PM <DIR> .. 07/30/2009 10:14 PM 371,236 chardet-1.0.2.win32.exe 07/30/2009 06:29 PM 206,440 chardet-1.0.2.zip 2 File(s) 577,676 bytes 2 Dir(s) 61,424,070,656 bytes free
Distutilsは、Linuxユーザ向けのインストールパッケージを構築する手助けをしてくれる。私の考えでは、これに時間をかける価値はおそらくない。Linuxでソフトウェアを配布してもらいたいなら、主要なLinuxディストリビューションでソフトウェアのパッケージ化を専門としているコミュニティメンバと協力したほうがいいだろう。
例として、私のchardet
ライブラリはDebian GNU/Linux リポジトリの中にある(従って、これはUbuntu リポジトリの中にもある)。私はこれに関して何もしていない。このパッケージはある日突然姿を現したのだ。DebianコミュニティはPythonライブラリをパッケージングする独自のポリシーを持っており、Debianのpython-chardet
ライブラリはこれらの慣習に従うように作られている。このパッケージはDebianのリポジトリの中に存続しているので、コンピュータの管理のために選択したシステムの設定にもよるがDebianのユーザはセキュリティアップデートや新しいバージョンを受け取ることになる。
Distutilsが構築するLinuxパッケージはこれらの利点を全く提供しない。時間は他のことに使ったほうが良い。
⁂
ソフトウェアをPython Package Indexにアップデートするプロセスには3つのステップがある。
setup.py sdist
とsetup.py bdist_*
で作成したパッケージをアップロードする。
アカウントを作成するためにPyPI ユーザ登録ページへ行こう。希望のユーザ名、パスワード、有効な電子メールアドレスを入力し、Register
ボタンをクリックしよう(PGPキーやGPGキーを提供することもできる。これらを持っていなかったり、これらの意味が分からなくても、心配は要らない)。PyPIから数分以内に、メールアドレスを検証するためのリンクが書かれている電子メールが届くはずなのでそれを確認してほしい。登録処理を完了させるためにそのリンクをクリックしよう。
今度は、ソフトウェアをPyPIに登録し、それをアップロードする必要がある。これは1つのステップですべて実行できる。
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py register sdist bdist_wininst upload ① running register We need to know who you are, so please choose either: 1. use your existing login, 2. register as a new user, 3. have the server generate a new password for you (and email it to you), or 4. quit Your selection [default 1]: 1 ② Username: MarkPilgrim ③ Password: Registering chardet to http://pypi.python.org/pypi ④ Server response (200): OK running sdist ⑤ ... output trimmed for brevity ... running bdist_wininst ⑥ ... output trimmed for brevity ... running upload ⑦ Submitting dist\chardet-1.0.2.zip to http://pypi.python.org/pypi Server response (200): OK Submitting dist\chardet-1.0.2.win32.exe to http://pypi.python.org/pypi Server response (200): OK I can store your PyPI login so future submissions will be faster. (the login will be stored in c:\home\.pypirc) Save your login (y/N)?n ⑧
setup.py
のパラメータへと更新するだけだ。次に、ソースディストリビューションの構築 (sdist
) と、Windowsインストーラの構築 (bdist_wininst
) を行って、それらをPyPIにアップロードする (upload
)。
おめでとう。Python Package Indexに自分のページを手に入れた! アドレスはhttp://pypi.python.org/pypi/NAME
だ(NAME
にはsetup.py
ファイルのnameパラメータに渡した文字列が入る)。
新しいバージョンをリリースしたいときは、setup.py
を単に新しいバージョン番号で更新して、同じアップロードコマンドを再び実行しよう:
c:\Users\pilgrim\chardet> c:\python31\python.exe setup.py register sdist bdist_wininst upload
⁂
Distutilsは、Pythonのパッケージ化のすべてだというわけではないが、これを書いている時点(2009年8月)において、Python 3で動作するパッケージングフレームワークはこれしかない。Python 2には他にも多くのフレームワークがあり、いくつかはインストールに焦点をあてているし、他のいくつかはテストやデプロイに焦点をあてている。このうち、いくつかは(あるいは全部が)将来的にはPython 3に移植されるかもしれない。
インストールに焦点をあてたフレームワーク:
テストやデプロイに焦点をあてたフレームワーク:
⁂
Distutilsについて:
setup()
関数で使えるすべての引数の一覧
site-packages
directory
他のパッケージング用フレームワークについて:
© 2001– Mark Pilgrim
© Fukada, Fujimoto(日本語版)