:tocdepth: 2

===============
一般 Python FAQ
===============

.. contents::

一般情報
========

Python とは何ですか？
---------------------

Python は、インタプリタ形式の、対話的な、
オブジェクト指向プログラミング言語です。この言語には、モジュール、例外、
動的な型付け、超高水準の動的なデータ型、およびクラスが取り入れられています。
Python は驚くべきパワーと非常に分かりやすい文法を持ち合わせています。
そして、多くのシステムコールやライブラリへだけでなく、
様々なウィンドウシステムへのインタフェースがあり、
C や C++ で拡張することもできます。また、プログラム可能なインタフェースが
必要なアプリケーションのための拡張言語としても利用できます。
最後に、Python はポータブルです。多くの Unix バリアント、
Mac、そして MS-DOS、Windows、Windows NT、OS/2 上の PC で動かすことができます。

さらに知りたければ、\ :ref:`tutorial-index` から始めましょう。他にも、
`Beginner's Guide to Python <http://wiki.python.org/moin/BeginnersGuide>`_
から、Python 学習のための入門用チュートリアルやリソースを参照できます。。


Python Software Foundation とは何ですか？
-----------------------------------------

Python Software Foundation は、Python バージョン 2.1 以降の
著作権を保持する独立の非営利組織です。PSF の任務は、Python
プログラミング言語に関するオープンソース技術を進め、
Python の使用を広めることです。PSF のホームページが
http://www.python.org/psf/ にあります。

PSF への寄付は米国で免税されています。Python を利用して役立ったと感じたら、
`the PSF donation page <http://www.python.org/psf/donations/>`_
で貢献をお願いします。


Python を使うのに著作権の制限はありますか？
-------------------------------------------

あなたが作成する Python に関するドキュメントのすべてに著作権を残し、
それらの著作権を表示する限り、ソースコードをどのように扱ってもかまいません。
この著作権規則を尊重する限り、商用に Python を利用しても、
ソースあるいはバイナリ形式で(変更の有無にかかわらず) Python の
コピーを販売しても、Python が何らかの形で組み込まれた製品を
販売してかまいません。もちろん、Python のあらゆる商業用途についても同様です。

ライセンスのより詳しい説明と全文へのリンクは
`the PSF license page <http://python.org/psf/license/>`_ を参照してください。

Python のロゴは商標登録されていて、使用に許可が必要な場合があります。
詳しい情報は `the Trademark Usage Policy
<http://www.python.org/psf/trademarks/>`__ を参照してください。


Python が誕生したきっかけは何ですか？
-------------------------------------

Guido van Rossum による、すべてのきっかけの *非常に* 簡潔な概要は
以下のとおりです:

   私は CWI の ABC グループでインタプリタ言語を実装する幅広い経験をしていて、
   そこで共に働くことで言語設計に関して大いに学びました。
   これが文のグループ化へのインデントの使用や超高水準のデータ型の包含など、
   (詳細は Python では全く異なりますが)
   Python の多くの特徴のもととなっています。

   私は ABC 言語に対して多くの不満を持っていましたが、
   同時に特徴の多くが好きでもありました。ABC 言語 (やその実装 )を拡張して
   私の不満を解消することは不可能でした (実際、拡張性の欠如は
   大きな問題だったのです)。私は Modula-2+ を使用することでいくらかの
   経験を積み、Modula-3 のデザイナーと話して Modula-3 のレポートを
   読みました。Modula-3 は例外処理に使う構文や語義、
   その他いくつかの Python の特徴の起源です。

   私は CWI で Amoeba 分散オペレーティングシステムのグループで働いていました。
   Amoeba のシステムコールインタフェースにはボーンシェルから
   アクセスしにくかったので、C プログラムやボーンシェルスクリプトを
   書くよりも良いシステム管理の方法が必要でした。Amoeba の
   エラー処理の経験から、プログラミング言語の機能としての例外の
   重要さを強く意識するようになりました。

   ABC のような構文と Amoeba のようなシステムコールを合わせ持った
   スクリプト言語が必要だろうと思いつきました。Amoeba 専用の言語を
   書くのは愚かであるだろうと気づき、一般に拡張できるような
   言語を求めることに決めました。

   1989 年のクリスマス休暇の間、自由な時間がたくさんできたので、
   その言語を実際に作ってみることにしました。翌年の間、
   勤務時間以外はほとんどその開発に費やし、Python は
   Amoeba プロジェクトのなかで成果を重ね、
   同僚からのフィードバックは私の開発を大いに加速させてくれました。

   1991 年 2 月、1 年間と少しの開発を経て、USENET に投稿することにしました。
   それは ``Misc/HISTORY`` ファイルに残っています。


Python は何をするのに向いていますか？
-------------------------------------

Python は、多岐にわたる問題に適用できる高水準な汎用プログラム言語です。

この言語は、文字列処理(正規表現、Unicode、ファイル間の差分の計算)、
インターネットプロトコル(HTTP、FTP、SMTP、XML-RPC、POP、IMAP、
CGI プログラミング)、ソフトウェアエンジニアリング(Python コードの
ユニットテスト、ロギング、プロファイリング、解析)、
オペレーティングシステムインタフェース(システムコール、ファイルシステム、
TCP/IP ソケット) のような領域をカバーする大規模な標準ライブラリから
成り立っています。何ができるかを知るには :ref:`library-index` の
一覧を参照してください。また、様々なサードパーティの拡張も使えます。
`the Python Package Index <http://pypi.python.org/pypi>`_ から
興味のあるパッケージを探してみましょう。


Python のバージョン番号の仕組みはどうなっているのですか？
---------------------------------------------------------

Python のバージョン番号は A.B.C や A.B のように付けられています。
A はメジャーバージョン番号で、言語の本当に重要な変更の時のみ増やされます。
B はマイナーバージョン番号で、そこまでは大きくない変更の時に増やされます。
C はマイクロレベルで、バグフィックスリリースの度に増やされます。
バグフィックスリリースに関する詳細は :pep:`6` を参照してください。

すべてのリリースがバグフィックスリリースであるというわけではありません。
メジャーリリースへの準備段階では、一連の開発リリースが作られ、
アルファ版、ベータ版、またはリリース候補と名付けられます。
アルファ版はインタフェースが確定されないうちにリリースされる早期リリースで、
２つのアルファリリース間でインタフェースが変わるかもしれません。
ベータ版はもっと安定していて、現存のインタフェースは保存されますが
新しいモジュールが追加されるかもしれません。リリース候補は固まったもので、
致命的なバグを直すのでなければ変更されません。

アルファ、ベータ、リリース候補の各バージョンには接尾語が追加されます。
N をなにか小さい番号として、アルファ版の接尾語は "aN" 、
ベータ版の接尾語は "bN" 、リリース候補の接尾語は "cN" です。
つまり、バージョン 2.0aN、バージョン 2.0bN、バージョン 2.0cN、
バージョン 2.0 の順にリリースされることになります。

また、"2.2+" のように "+" 接尾語が付いたバージョン番号もあります。
これは未発表のバージョンで、Subversion トランクから直接組み立てられています。
実際、最後のマイナーリリースができた後、Subversion トランクは
"2.4a0" のように "a0" がつく次のマイナーバージョンになります。

``sys.version``\ 、\ ``sys.hexversion``\ 、\ ``sys.version_info`` についての
ドキュメントも参照してください。


Python のソースのコピーはどこで手に入りますか？
-----------------------------------------------

最新の Python ソースは python.org (http://www.python.org/download/) から
いつでも手に入れることができます。最新の開発版ソースは
http://svn.python.org/projects/python/trunk の匿名
Subversion から手に入れることができます。

ソースは gzip された tar ファイルで配布され、完全な C のソース、
Sphinx によりフォーマットされたドキュメント、Python ライブラリモジュール、
サンプルプログラム、そしていくつかの役立つ配布自由なソフトウェアを
含んでいます。このソースはほとんどの UNIX プラットフォームで
そのままコンパイルして動かせます。

.. XXX update link once the dev faq is relocated

ソースコードを手に入れてコンパイルすることの詳しい情報は
`開発者 FAQ <http://www.python.org/dev/faq/>`__ を参照してください。


Python のドキュメントはどこで手に入りますか？
---------------------------------------------

.. XXX mention py3k

Python の現行の安定バージョンの標準ドキュメントは http://docs.python.org/ から
利用できます。また、PDF、プレーンテキスト、ダウンロードできる HTML 版も
http://docs.python.org/download.html から利用できます。

このドキュメントは reStructuredText で書かれ、\ `the Sphinx documentation tool
<http://sphinx.pocoo.org/>`__ で構成されました。このドキュメントに使われた
reStructuredText のソースは Python のソース配布に含まれます。


プログラミングをしたことがないのですが、 Python のチュートリアルはありますか？
------------------------------------------------------------------------------

膨大な量の役に立つチュートリアルや書籍があります。標準のドキュメントには
:ref:`tutorial-index` などがあります。

Python プログラム初心者のための情報のチュートリアルのリストは `the Beginner's
Guide <http://wiki.python.org/moin/BeginnersGuide>`_ を参照してください。


Python のためのニュースグループやメーリングリストはありますか？
---------------------------------------------------------------

ニュースグループ :newsgroup:`comp.lang.python` やメーリングリスト
`python-list <http://mail.python.org/mailman/listinfo/python-list>`_
があります。ニュースグループとメーリングリストは互いに接続されていて、
ニュースを購読すればメーリングリストに参加する必要はありません。
:newsgroup:`comp.lang.python` は一日に数百のポスティングを受ける高い
トラフィックで、USENET 読者は多くの場合、このボリュームに応えることができます。

新しいソフトウェアリリースとイベントの告知は comp.lang.python.announce で
見つけられます。これは 一日に 5 ポスティング程度を受ける低トラフィックの
手頃なメーリングリストです。\ `the python-announce mailing list
<http://mail.python.org/mailman/listinfo/python-announce-list>`_
から利用可能です。

その他のメーリングリストやニュースグループについての詳しい情報は
http://www.python.org/community/lists/ にあります。


Python のベータテスト版はどこで手に入りますか？
-----------------------------------------------

アルファ/ベータリリースは http://www.python.org/download/ で手に入ります。
リリースはすべて comp.lang.python や comp.lang.python.announce の
ニュースグループと Python ホームページ http://www.python.org/ で
告知され、PSS ニュースフィードが使えます。

.. XXX update link once the dev faq is relocated

Subversion から開発版を手に入れることもできます。
詳細は http://www.python.org/dev/faq/ を参照してください。


Python のバグ報告やパッチを上げるにはどうしたら良いですか？
-----------------------------------------------------------

バグの報告やパッチの投稿には、\ http://bugs.python.org/ から
Roundup installation を利用してください。

バグ報告には Roundup アカウントが必要です (こちらから関連する質問を
させて頂くため、またバグを解決したときにアップデート版を送るため)。
以前バグ報告に SourceForge を使っていたことがあるなら、Roundup の
`password reset procedure <http://bugs.python.org/user?@template=forgotten>`_
から Roundup のパスワードを取得することができます。

.. XXX adapt link to dev guide

Python 開発の工程について、詳しくは `the Python Developer's
Guide <http://python.org/dev/>`_ を参照してください。


Python について発行された記事を何か参照できますか？
---------------------------------------------------

Python に関するあなたの愛読書を引用するのが一番でしょう。

Python に関する一番初めの記事はとても古く、1991年に書かれています。

    Guido van Rossum and Jelke de Boer, "Interactively Testing Remote Servers
    Using the Python Programming Language", CWI Quarterly, Volume 4, Issue 4
    (December 1991), Amsterdam, pp 283-303.


Python の本はありますか？
-------------------------

はい、たくさんあり、そのほとんどは現在も出版されています。
リストは python.org wiki http://wiki.python.org/moin/PythonBooks にあります。

また、オンライン書店で "Python" で検索し、Monty Python をフィルタで
除外してもいいです (または、"Python" と "言語" で検索してください)。


www.python.org は世界のどこにあるのですか？
-------------------------------------------

現在、アムステルダムの `XS4ALL <http://www.xs4all.nl>`_ に優雅に
迎えられています。python.org のホスティングの手配に関して、
Thomas Wouters 氏に感謝いたします。


なぜ Python という名前なのですか？
----------------------------------

Python の開発が始まった頃、Guido van Rossum は 1970 年代に始まった BBC の
コメディシリーズ `"Monty Python's Flying Circus" <http://pythonline.com/>`__ の
スクリプト集を読んでいました。Van Rossum は、短くて、ユニークで、
少しミステリアスな名前が欲しかったので、この言語の名前を Python と
呼ぶことにしたのです。


『空飛ぶモンティ・パイソン』を好きでなくてはいけませんか？
----------------------------------------------------------

いいえ。でも、好きになってくれるといいな。：）


現実世界での Python
===================

Python はどれくらい安定していますか？
-------------------------------------

とても安定しています。1991 年以来新しい安定リリースはおよそ 6 から 8 ヶ月毎に
出されていて、このペースが続きそうです。現在、主要なリリースはたいてい
約 18 ヶ月毎に出されています。

開発者が旧バージョンの "bugfix" リリースを公開するので、現行のリリースの
安定性は徐々に向上していきます。バグフィックスリリースは
、バージョン番号の 3 番目の成分によって示され(例: 2.5.3、2.6.2)、
安定性に配慮されています。バグフィックスリリースには既知の問題への
修正だけが含まれ、一連のバグフィックスリリースで同じインタフェースが
保たれることが保証されているのです。

最新の安定版は `Python download page <http://python.org/download/>`_ から
いつでも手に入れることができます。現在、安定版に 2 つのブランチがあるので、
推奨の実用版には 2.x と 3.x の２つがあります。現時点では Python 2 の方が
Python 3 より多くのサードパーティソフトに対応しているので、Python 3.x は
Python 2.x より使いづらいかもしれません。Python 2 のコードは基本的に
そのままでは Python 3 で動かすことができません。


どれくらいの人が Python を使っていますか？
------------------------------------------

正確な人数を調べるのは難しいですが、おそらく数万人のユーザーがいるでしょう。

Python は自由にダウンロード可能なので、売上高がなく、多数のサイトから利用でき、
多くの Linux ディストーションに同梱されているので、ダウンロード統計から
全体の状況を知ることはできません。

comp.lang.python ニュースグループはとても活発ですが、
すべての Python ユーザーが投稿するわけではなく、読みすらしない人もいます。


Python で行われた大きなプロジェクトはありますか？
-------------------------------------------------

Python を利用しているプロジェクトのリストは http://python.org/about/success を
参照してください。\ `past Python conferences
<http://python.org/community/workshops/>`_ から議事録を参照すると、
多くの会社や組織の貢献がわかるでしょう。

注目されている Python のプロジェクトは `the Mailman mailing list manager
<http://www.list.org>`_ や `the Zope application server
<http://www.zope.org>`_ などです。\ `Red Hat
<http://www.redhat.com>`_ をはじめとするいくつかの Linux ディストーションの
インストーラやシステムアドミニストレーションソフトウェアは、一部や全部が
Python で書かれています。内部で Python を利用している企業には、
Google、Yahoo、Lucasfilm Ltd. などがあります。


将来 Python にどのような新しい開発が期待されますか？
----------------------------------------------------

Python Enhancement Proposals (PEPs) http://www.python.org/dev/peps/ を
参照してください。PEPs は Python に提案された新機能について書かれた設計書で、
簡潔な技術仕様と原理が提供されています。"Python X.Y Release Schedule"
(X.Y はまだリリースされていないバージョン) を探してください。

新しい開発については `the python-dev mailing list
<http://mail.python.org/mailman/listinfo/python-dev/>`_ で議論されています。


Python の互換性を無くすような提案をしてもいいのですか？
-------------------------------------------------------

一般的には、してはいけません。世界中にすでに何百万行もの Python コードが
あるので、既存のプログラムのどんなに僅かな部分でも無効にしてしまうような
言語仕様の変更も認められてはなりません。コンバートするプログラムが出来てさえ、
すべてのドキュメントをアップデートしなければならないという問題があります。
Python に関する多くの本が出版されているので、それらを一発で不適切に
するようなことはしたくないです。

仕様を変えなければならないのなら、緩やかなアップグレード計画が
組まれなくてはなりません。\ :pep:`5` で、ユーザーの受ける分裂を最小限にしながら
後方互換性のない変更を行うために従うべき手順について説明しています。


Python は 2000 年問題に対応できますか？
---------------------------------------

.. remove this question?

2003年8月現在、重大な問題は全く報告されていないので、
2000 年問題は気にする必要はないように思われます。

Python は日付の計算とその実行でほんの少しだけ C ライブラリの関数に
依存しています。Python は一般的に時間を 1970 年以来の秒か
``(year, month, day, ...)`` タプルの年を 4 桁で表したもので表すので、
2000 年問題のバグは起こらないでしょう。ですから C ライブラリに問題がなければ、
Python にも問題がないはずです。もちろん、Python で書かれたある種の
アプリケーションが 2 桁で表された年を誤って解釈することは
あるかもしれません。

Python は無料で提供されているので、絶対の保証はありません。
予期せぬ問題が *あれば*\ 、開発者の責任というよりはユーザーの責任であり、
損害賠償を求める相手は誰もいません。Python の著作権表示には
以下の注意書きが含まれています:

    4. PSF is making Python 2.3 available to Licensee on an "AS IS"
    basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED.  BY
    WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY
    REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
    PURPOSE OR THAT THE USE OF PYTHON 2.3 WILL NOT INFRINGE ANY THIRD PARTY
    RIGHTS.

    5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
    2.3 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
    A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.3,
    OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

嬉しいことに、 *もし* 問題にいきあたっても、その問題を探し出して
修理するために完全なソースを使うことができます。
これはオープンソースプログラミング環境の利点の１つです。


Python は初心者プログラマに向いている言語ですか？
-------------------------------------------------

はい。

未だにプログラミング初学者にとって一般的なのは、Pascal、C、C++ のサブセット、
Java など、手続き型の静的型付けの言語です。生徒にとっては、
第一の言語として Python を学ぶのが役に立つでしょう。Python には非常に簡潔で
一貫した構文と大きな標準ライブラリがあります。そして一番重要なことに、
初心者プログラミングのコースで Python を学ぶことで、生徒は問題の分析や
データ型の設計など、重要なプログラミングスキルに集中することができるのです。
Python なら、生徒はループや手続きなどの基本概念をすぐに取り入れられます。
最初の課程でいきなりユーザ定義のオブジェクトを操ることさえできるでしょう。

プログラミングをしたことがない初心者にとって、静的型付け言語を使うのは
不自然に思われます。習得すべき内容はより複雑になり、学習のペースが
遅くなってしまいます。生徒は、コンピュータのように思考し、問題を分析し、
一貫したインタフェースを設計して、データをカプセル化することを
学ぶことになります。長期的に見れば静的型付け言語を学ぶことは重要ですが、
それが最初のプログラミングの授業で学ぶべき最高の話題とは限りません。

Python の良いところは他にもたくさんあります。Python には、Java のように
大きな標準ライブラリがあり、生徒が何かを *する* 段階で非常に早く
プログラミングプロジェクトに参加できるようになります。宿題は標準の
四則演算機や平均を求めるプログラムに限定されません。標準ライブラリを
使用することで、生徒はプログラミングの原理を学びながら現実的な
アプリケーションに取り組む満足感を得ることができます。また、
標準ライブラリの使用からコードの再利用を学ぶことができます。
PyGame などのサードパーティモジュールもまた手が届く範囲を広げるのに役立ちます。

Python のインタラクティブインタプリタによって、プログラミングをしながら、
言語機能を確認することができます。別のウィンドウでプログラムのソースに
入っている間、ウィンドウでインタプリタを起動させたままに
しておくことができます。リストのメソッドを思い出せないときは、
例えばこのようにできます::

   >>> L = []
   >>> dir(L)
   ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
   'reverse', 'sort']
   >>> help(L.append)
   Help on built-in function append:

   append(...)
       L.append(object) -- append object to end
   >>> L.append(1)
   >>> L
   [1]

インタプリタがあれば、プログラミングをしている間にドキュメントは
生徒のそばを離れません。

Python のための良い IDE もあります。IDLE は Python で Tkinter を使って
書かれたクロスプラットフォーム IDE です。PythonWin は Windows 専用の
IDE です。Emacs には、ユーザにとって幸運なことに、素晴らしい Python モードが
あります。これらすべてのプログラミング環境から、シンタックスハイライト、
オートインデント、コーディング中のインタラクティブインタプリタへのアクセスが
使えます。 http://www.python.org/editors/ から Python 編集環境の
一覧を参照してください。

Python の教育における利用についての議論がしたいなら、\ `the edu-sig mailing list
<http://python.org/community/sigs/current/edu-sig>`_ に参加するとよいでしょう。


Python のアップグレード
=======================

私のアプリケーションに使われている bsddb185 モジュールは何が問題とされていますか？
----------------------------------------------------------------------------------

.. XXX remove this question?

Python2.3 から、配布時に古い bsddb モジュールの代わりに `PyBSDDB package
<http://pybsddb.sf.net/>`_ が含まれるようになりました。このモジュールは
API レベルでは後方互換性を保っていますが、基本となる `Berkeley DB
<http://www.sleepycat.com>`_ ライブラリは新しいものが必要となります。
古い bsddb モジュールで作られたファイルは新しいモジュールで
直接開くことができません。

古いバージョンの Python と Python 2.3 の一部である２つのスクリプト
(Tools/scripts ディレクトリの db2pickle.py と pickle2db.py) を使用して、
古いデータベースファイルを新しいフォーマットにコンバートすることができます。
古いバージョンの Python を使って、スクリプトを pickle に変換するために
db2pickle.py スクリプトを起動してください。例えば::

   python2.2 <pathto>/db2pickley.py database.db database.pck

データベースファイルを改名してください::

   mv database.db olddatabase.db

そして、 pickle ファイルを新しいフォーマットのデータベースに変換してください::

   python <pathto>/pickle2db.py database.db database.pck

入力すべき正確なコマンドは、あなたのインストールの詳細によって変わります。
これら 2 つのスクリプトの命令の詳細は、それぞれの最初にある
doc string を確認してください。

