一般 Python FAQ

目次

一般情報

Python とは何ですか?

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

さらに知りたければ、 Python チュートリアル から始めましょう。他にも、 Beginner's Guide to Python から、Python 学習のための入門用チュートリアルやリソースを参照できます。。

Python Software Foundation とは何ですか?

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

PSF への寄付は米国で免税されています。Python を利用して役立ったと感じたら、the PSF donation page で貢献をお願いします。

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

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

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

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

私は CWI で Amoeba 分散オペレーティングシステムのグループで働いていました。Amoeba のシステムコールインタフェースには Bourne シェルからアクセスしにくかったので、C プログラムや Bourne シェルスクリプトを書くよりも良いシステム管理の方法が必要でした。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 ソケット) のような領域をカバーする大規模な標準ライブラリから成り立っています。何ができるかを知るには Python 標準ライブラリ の一覧を参照してください。また、様々なサードパーティの拡張も使えます。 the Python Package Index から興味のあるパッケージを探してみましょう。

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

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

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

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

また、"2.2+" のように "+" 接尾語が付いたバージョン番号もあります。これは未発表のバージョンで、 CPython 開発リポジトリから直接ビルドされています。実際、最後のマイナーリリースが行われた後、バージョンは "2.4a0" のように "a0" がつく次のマイナーバージョンになります。

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

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

最新の Python ソースは python.org (https://www.python.org/downloads/) からいつでも手に入れることができます。最新の開発版ソースは https://github.python.org/cpython にアクセスして手に入れることができます。

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

ソースコードを手に入れてコンパイルすることの詳しい情報は Getting Started section of the Python Developer's Guide を参照してください。

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

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

このドキュメントは reStructuredText で書かれ、the Sphinx documentation tool で構成されました。このドキュメントに使われた reStructuredText のソースは Python のソース配布に含まれます。

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

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

Python プログラム初心者のための情報のチュートリアルのリストは the Beginner's Guide を参照してください。

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

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

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

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

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

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

Git から開発版を手に入れることもできます。詳細は The Python Developer's guide を参照してください。

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

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

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

Python 開発の工程について、詳しくは the Python Developer's Guide を参照してください。

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 https://wiki.python.org/moin/PythonBooks にあります。

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

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

Pythonプロジェクトのインフラは世界中にあり、Pythonインフラストラクチャチームによって管理されています。詳細は こちら.

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

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

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

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

現実世界での Python

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

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

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

最新の安定版リリースは常に Python download page にあります。Pythonには2.xと3.xという、製品に利用可能な2つのバージョンがあります。推奨のバージョンは3.xで、これは広く利用されているライブラリのほとんどでサポートされています。2.xも依然として広く利用されていあすが、`2020年1月1日以降はメンテナンスされない予定です<https://www.python.org/dev/peps/pep-0373/>`_

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

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

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

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

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

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

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

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

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

新しい開発については the python-dev mailing list で議論されています。

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

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

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

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

はい。

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

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

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

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

>>> L = []
>>> dir(L) 
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__delslice__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__getslice__', '__gt__',
'__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__',
'__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__',
'__subclasshook__', '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 モードがあります。これらすべてのプログラミング環境から、シンタックスハイライト、オートインデント、コーディング中のインタラクティブインタプリタへのアクセスが使えます。the Python wiki から Python 編集環境の一覧を参照してください。

Python の教育における利用についての議論がしたいなら、the edu-sig mailing list に参加するとよいでしょう。

Python のアップグレード

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

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

古いバージョンの Python と Python 2.3 の一部である2つのスクリプト (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 を確認してください。