3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonのソースをダウンロードしてみた

Posted at

直ぐには見ないかもしれないけど、pythonのソースをダウンロードした。
(3.4のソースをダウンロードした方が良いのかも知れないが、今のところは、使っている2.7(Python-2.7.7)のソースをダウンロードしている)
今後、仕様とかの確認(の補助として)で、ソースの中身まで見ることがあるかも知れない。

まずはmainを探してみる

取り敢えず、python.exeの入り口までを探しておく。

まず、main()で検索。
Demoとかを含め、幾つかmainが見つかった。
ファイル名とかで、大体の当たりは付くけど、Makefileも見て、検索結果を確定させる。

検索の結果、PC/os2emx/Makefileに下記の行があった。

PYTHON.EXE=	python.exe

こいつをビルドしてるところは

$(PYTHON.EXE): $(SRC.EXE) $(PYTHON.EXEIMP) $(OUT)python.def
	$(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.EXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)python.def
	$(EXEOPT) -aq $(PYTHON.EXE) -h$(NFILES)

で、SRC.EXEの定義は、

SRC.EXE=	$(TOP)Modules/python.c

このソース(Modules/python.c)の中身は、次の通り。

/* Minimal main program -- everything is loaded from the library */

#include "Python.h"

#ifdef __FreeBSD__
#include <floatingpoint.h>
#endif

int
main(int argc, char **argv)
{
	/* 754 requires that FP exceptions run in "no stop" mode by default,
	 * and until C vendors implement C99's ways to control FP exceptions,
	 * Python requires non-stop mode.  Alas, some platforms enable FP
	 * exceptions by default.  Here we disable them.
	 */
#ifdef __FreeBSD__
	fp_except_t m;

	m = fpgetmask();
	fpsetmask(m & ~FP_X_OFL);
#endif
	return Py_Main(argc, argv);
}

API

上記を調べている内に、pythonのAPIはpython.defにエントリが定義されているように思った。
python.defの中身はこんな感じ。(抜粋)

LIBRARY        PYTHON24 INITINSTANCE TERMINSTANCE
DESCRIPTION    'Python 2.4 Core DLL'
PROTMODE
DATA           MULTIPLE NONSHARED

EXPORTS
               ; Data
               PyCFunction_Type
・・・
               ; Code
               PyArg_Parse
・・・
               Py_Initialize
               Py_IsInitialized
               Py_Main
               Py_MakePendingCalls
               Py_Malloc
               Py_NewInterpreter
               Py_Realloc
・・・

当然かも知れないけど、APIのリファレンスサイトもある。

ソースを調べるんだったら、APIのエントリを切り口にしても良いかもしれない。

ダンロードしたソースの中のDemoフォルダに、APIを使ったサンプルコードぽいものがあった。
APIまで使うかは分からないけど、使う場合には参考になるかも知れない。

pythonのソースを読もうと思った時に、解析した情報が載っているサイトを検索したけど、今のところ見つけられていない。
アウトラインが分かると助かるんだけど。
もう少し調べて面白いネタがあったら、記事を投稿させてもらうかも。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?