3.3。 Pythonを構成する
3.1。 オプションの構成
以下を使用して、すべての./configure
スクリプトオプションを一覧表示します。
./configure --help
PythonソースディストリビューションのMisc/SpecialBuilds.txt
も参照してください。
3.1.1。 一般的なオプション
- --enable-loadable-sqlite-extensions
_sqlite
拡張モジュールでロード可能な拡張をサポートします(デフォルトはnoです)。sqlite3 モジュールの sqlite3.Connection.enable_load_extension()メソッドを参照してください。
バージョン3.6の新機能。
- --disable-ipv6
- IPv6サポートを無効にします(サポートされている場合はデフォルトで有効になります)。 socket モジュールを参照してください。
- --enable-big-digits=[15|30]
サイズをPython int 桁のビットで定義します:15または30ビット。
デフォルトでは、
sizeof(void*)
に応じてビット数が選択されます。void*
サイズが64ビット以上の場合は30ビット、それ以外の場合は15ビットです。PYLONG_BITS_IN_DIGIT
から15
または30
を定義します。sys.int_info.bits_per_digit を参照してください。
- --with-cxx-main
- --with-cxx-main=COMPILER
- Python
main()
関数をコンパイルし、Python実行可能ファイルをC ++コンパイラ($CXX
、または指定されている場合は COMPILER )にリンクします。
- --with-suffix=SUFFIX
Python実行可能サフィックスを SUFFIX に設定します。
デフォルトのサフィックスは、WindowsおよびmacOSでは
.exe
(python.exe
実行可能ファイル)、その他のプラットフォームでは空の文字列(python
実行可能ファイル)です。
- --with-tzpath=<list of absolute paths separated by pathsep>
zoneinfo.TZPATH のデフォルトのタイムゾーン検索パスを選択します。 zoneinfo モジュールのコンパイル時構成を参照してください。
デフォルト:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
。os.pathsep パス区切り文字を参照してください。
バージョン3.9の新機能。
- --without-decimal-contextvar
コルーチンローカルコンテキスト(デフォルト)ではなくスレッドローカルコンテキストを使用して
_decimal
拡張モジュールを構築します。 decimal モジュールを参照してください。decimal.HAVE_CONTEXTVAR および contextvars モジュールを参照してください。
バージョン3.9の新機能。
- --with-dbmliborder=db1:db2:...
dbm モジュールのdbバックエンドをチェックする順序を上書きします
有効な値は、コロン(
:
)で区切られた文字列で、バックエンド名は次のとおりです。ndbm
;gdbm
;bdb
。
- --without-c-locale-coercion
UTF-8ベースのロケールへのCロケール強制を無効にします(デフォルトで有効)。
PY_COERCE_C_LOCALE
マクロを定義しないでください。PYTHONCOERCECLOCALE および PEP 538 を参照してください。
- --with-platlibdir=DIRNAME
Pythonライブラリのディレクトリ名(デフォルトは
lib
)。FedoraとSuSEは、64ビットプラットフォームで
lib64
を使用します。sys.platlibdir を参照してください。
バージョン3.9の新機能。
- --with-wheel-pkg-dir=PATH
ensurepip モジュールで使用されるホイールパッケージのディレクトリ(デフォルトではなし)。
一部のLinuxディストリビューションパッケージポリシーでは、依存関係をバンドルしないことを推奨しています。 たとえば、Fedoraは
/usr/share/python-wheels/
ディレクトリにホイールパッケージをインストールし、ensurepip._bundled
パッケージはインストールしません。バージョン3.10の新機能。
3.1.2。 インストールオプション
- --disable-test-modules
test パッケージや
_testcapi
拡張モジュール(デフォルトでビルドおよびインストール)などのテストモジュールをビルドまたはインストールしないでください。バージョン3.10の新機能。
- --with-ensurepip=[upgrade|install|no]
Pythonインストールで実行される ensurepip コマンドを選択します。
upgrade
(デフォルト):python -m ensurepip --altinstall --upgrade
コマンドを実行します。install
:python -m ensurepip --altinstall
コマンドを実行します。no
:ensurepipを実行しないでください。
バージョン3.6の新機能。
3.1.3。 パフォーマンスオプション
最高のパフォーマンスを得るには、--enable-optimizations --with-lto
(PGO + LTO)を使用してPythonを構成することをお勧めします。
- --enable-optimizations
PROFILE_TASK を使用してプロファイルガイド最適化(PGO)を有効にします(デフォルトでは無効になっています)。
CコンパイラClangには、PGO用の
llvm-profdata
プログラムが必要です。 macOSでは、GCCもそれを必要とします。GCCはmacOS上のClangの単なるエイリアスです。--enable-shared
およびGCCが使用されている場合は、libpythonのセマンティック介入も無効にします。コンパイラおよびリンカーフラグに-fno-semantic-interposition
を追加します。バージョン3.6の新機能。
バージョン3.10で変更: GCCで
-fno-semantic-interposition
を使用します。
- PROFILE_TASK
Makefileで使用される環境変数:PGO生成タスクのPythonコマンドライン引数。
デフォルト:
-m test --pgo --timeout=$(TESTTIMEOUT)
。バージョン3.8の新機能。
- --with-lto
任意のビルドでリンク時間最適化(LTO)を有効にします(デフォルトでは無効になっています)。
CコンパイラClangには、LTO用の
llvm-ar
(macOSではar
)と、LTO対応リンカー(ld.gold
またはlld
)が必要です。バージョン3.6の新機能。
- --with-computed-gotos
- 評価ループで計算されたgotoを有効にします(サポートされているコンパイラではデフォルトで有効になっています)。
- --without-pymalloc
専用のPythonメモリアロケータ pymalloc を無効にします(デフォルトで有効になっています)。
PYTHONMALLOC 環境変数も参照してください。
- --without-doc-strings
静的ドキュメント文字列を無効にして、メモリフットプリントを削減します(デフォルトで有効)。 Pythonで定義されたドキュメント文字列は影響を受けません。
WITH_DOC_STRINGS
マクロを定義しないでください。PyDoc_STRVAR()
マクロを参照してください。
- --enable-profiling
gprof
を使用して経営幹部レベルのコードプロファイリングを有効にします(デフォルトでは無効になっています)。
3.1.4。 Pythonデバッグビルド
デバッグビルドは、 -with-pydebug 構成オプションを使用してビルドされたPythonです。
デバッグビルドの効果:
- デフォルトですべての警告を表示します。 warnings モジュールのデフォルトの警告フィルターのリストは空です。
d
を sys.abiflags に追加します。sys.gettotalrefcount()
関数を追加します。- -X showrefcount コマンドラインオプションを追加します。
- PYTHONTHREADDEBUG 環境変数を追加します。
__ltrace__
変数のサポートを追加します。変数が定義されている場合、バイトコード評価ループで低レベルのトレースを有効にします。- デバッグフックをメモリアロケータにインストールして、バッファオーバーフローやその他のメモリエラーを検出します。
Py_DEBUG
およびPy_REF_DEBUG
マクロを定義します。- ランタイムチェックを追加します:
#ifdef Py_DEBUG
と#endif
で囲まれたコード。assert(...)
および_PyObject_ASSERT(...)
アサーションを有効にします。NDEBUG
マクロを設定しないでください( -with-assertions 構成オプションも参照してください)。 メインランタイムチェック:- 関数の引数に健全性チェックを追加します。
- Unicodeおよびintオブジェクトは、初期化されていないオブジェクトの使用を検出するためのパターンで満たされたメモリを使用して作成されます。
- 現在の例外をクリアまたは置換できる関数が、例外が発生した状態で呼び出されないようにしてください。
- ガベージコレクター( gc.collect()関数)は、オブジェクトの整合性に関するいくつかの基本的なチェックを実行します。
Py_SAFE_DOWNCAST()
マクロは、ワイド型からナロー型にダウンキャストするときに整数のアンダーフローとオーバーフローをチェックします。
Python開発モードおよび-with-trace-refs 構成オプションも参照してください。
バージョン3.8で変更:リリースビルドとデバッグビルドはABI互換になりました:Py_DEBUG
マクロの定義はPy_TRACE_REFS
マクロを意味しなくなりました(を参照- -trace-refs オプション)。これにより、ABIの非互換性のみが導入されます。
3.1.5。 デバッグオプション
- --with-pydebug
- デバッグモードでPythonをビルドする:
Py_DEBUG
マクロを定義します(デフォルトでは無効になっています)。
- --with-trace-refs
デバッグ目的で参照のトレースを有効にします(デフォルトでは無効になっています)。
効果:
Py_TRACE_REFS
マクロを定義します。sys.getobjects()
関数を追加します。PYTHONDUMPREFS 環境変数を追加します。
このビルドは、リリースビルド(デフォルトビルド)またはデバッグビルド(
Py_DEBUG
およびPy_REF_DEBUG
マクロ)とABI互換ではありません。バージョン3.8の新機能。
- --with-assertions
Cアサーションを有効にしてビルド(デフォルトはno):
assert(...);
および_PyObject_ASSERT(...);
。設定されている場合、
NDEBUG
マクロは OPT コンパイラ変数で定義されていません。-with-pydebug オプション( debug build )も参照してください。これにより、アサーションも有効になります。
バージョン3.6の新機能。
- --with-valgrind
- Valgrindサポートを有効にします(デフォルトはnoです)。
- --with-dtrace
DTraceサポートを有効にします(デフォルトはnoです)。
DTraceおよびSystemTapを使用したCPythonのインストルメンテーションを参照してください。
バージョン3.6の新機能。
- --with-address-sanitizer
AddressSanitizerメモリエラー検出器
asan
を有効にします(デフォルトはnoです)。バージョン3.6の新機能。
- --with-memory-sanitizer
MemorySanitizer割り当てエラー検出器
msan
を有効にします(デフォルトはnoです)。バージョン3.6の新機能。
- --with-undefined-behavior-sanitizer
UndefinedBehaviorSanitizer未定義動作検出器
ubsan
を有効にします(デフォルトはnoです)。バージョン3.6の新機能。
3.1.6。 リンカーオプション
- --enable-shared
- 共有Pythonライブラリの構築を有効にします:
libpython
(デフォルトはno)。
- --without-static-libpython
libpythonMAJOR.MINOR.a
をビルドしたり、python.o
をインストールしたりしないでください(デフォルトでビルドされ、有効になっています)。バージョン3.10の新機能。
3.1.7。 ライブラリオプション
- --with-libs='lib1 ...'
- 追加のライブラリに対するリンク(デフォルトはno)。
- --with-system-expat
- インストールされている
expat
ライブラリを使用してpyexpat
モジュールをビルドします(デフォルトはnoです)。
- --with-system-ffi
- インストールされている
ffi
ライブラリを使用して_ctypes
拡張モジュールをビルドします。 ctypes モジュールを参照してください(デフォルトはシステムに依存します)。
- --with-system-libmpdec
インストールされている
mpdec
ライブラリを使用して_decimal
拡張モジュールをビルドします。 decimal モジュールを参照してください(デフォルトはno)。バージョン3.3の新機能。
- --with-readline=editline
readline モジュールのバックエンドには
editline
ライブラリを使用してください。WITH_EDITLINE
マクロを定義します。バージョン3.10の新機能。
- --without-readline
readline モジュール(デフォルトでビルド)をビルドしないでください。
HAVE_LIBREADLINE
マクロを定義しないでください。バージョン3.10の新機能。
- --with-tcltk-includes='-I...'
- TclおよびTkインクルードファイルの検索をオーバーライドします。
- --with-tcltk-libs='-L...'
- TclおよびTkライブラリの検索を上書きします。
- --with-libm=STRING
libm
数学ライブラリを STRING にオーバーライドします(デフォルトはシステムに依存します)。
- --with-libc=STRING
libc
Cライブラリを STRING にオーバーライドします(デフォルトはシステムに依存します)。
- --with-openssl=DIR
OpenSSLディレクトリのルート。
バージョン3.7の新機能。
- --with-openssl-rpath=[no|auto|DIR]
OpenSSLライブラリのランタイムライブラリディレクトリ(rpath)を設定します。
no
(デフォルト):rpathを設定しません。auto
:からのrpathの自動検出--with-openssl およびpkg-config
;DIR :明示的なrpathを設定します。
バージョン3.10の新機能。
3.1.8。 セキュリティオプション
- --with-hash-algorithm=[fnv|siphash24]
Python/pyhash.c
で使用するハッシュアルゴリズムを選択します。siphash24
(デフォルト)。fnv
;
バージョン3.4の新機能。
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2
組み込みのハッシュモジュール:
md5
;sha1
;sha256
;sha512
;sha3
(シェイクあり);blake2
。
バージョン3.9の新機能。
- --with-ssl-default-suites=[python|openssl|STRING]
OpenSSLのデフォルトの暗号スイート文字列を上書きします。
python
(デフォルト):Pythonの優先選択を使用します。openssl
:OpenSSLのデフォルトはそのままにしておきます。STRING :カスタム文字列を使用します
ssl モジュールを参照してください。
バージョン3.7の新機能。
バージョン3.10で変更:設定
python
および STRING でも、TLS1.2が最小プロトコルバージョンとして設定されています。
3.1.9。 macOSオプション
Mac/README.rst
を参照してください。
- --enable-universalsdk
- --enable-universalsdk=SDKDIR
- ユニバーサルバイナリビルドを作成します。 SDKDIR は、ビルドの実行に使用するmacOS SDKを指定します(デフォルトはno)。
- --enable-framework
- --enable-framework=INSTALLDIR
- 従来のUnixインストールではなく、Python.frameworkを作成します。 オプションの INSTALLDIR は、インストールパスを指定します(デフォルトはnoです)。
- --with-universal-archs=ARCH
作成するユニバーサルバイナリの種類を指定します。 このオプションは、 -enable-universalsdk が設定されている場合にのみ有効です。
オプション:
universal2
;32-bit
;64-bit
;3-way
;intel
;intel-32
;intel-64
;all
。
- --with-framework-name=FRAMEWORK
- -enable-framework が設定されている場合にのみ有効なmacOS上のPythonフレームワークの名前を指定します(デフォルト:
Python
)。
3.2。 Pythonビルドシステム
3.2.1。 ビルドシステムのメインファイル
configure.ac
=>configure
;Makefile.pre.in
=>Makefile
(configure
によって作成されました);pyconfig.h
(configure
によって作成されました);Modules/Setup
:Module/makesetup
シェルスクリプトを使用してMakefileによって構築されたC拡張機能。setup.py
: distutils モジュールを使用して構築されたC拡張機能。
3.2.2。 主なビルド手順
- Cファイル(
.c
)は、オブジェクトファイル(.o
)として作成されます。 - 静的
libpython
ライブラリ(.a
)は、オブジェクトファイルから作成されます。 python.o
と静的libpython
ライブラリは、最終的なpython
プログラムにリンクされています。- C拡張機能は、Makefile(
Modules/Setup
を参照)およびpython setup.py build
によって構築されます。
3.2.3。 メインのMakefileターゲット
make
:標準ライブラリを使用してPythonをビルドします。make platform:
:python
プログラムをビルドしますが、標準ライブラリ拡張モジュールはビルドしないでください。make profile-opt
:プロファイルガイド最適化(PGO)を使用してPythonをビルドします。 configure -enable-optimizations オプションを使用して、これをmake
コマンドのデフォルトターゲット(make all
または単にmake
)にすることができます。make buildbottest
:ビルドボットがPythonをテストするのと同じ方法で、PythonをビルドしてPythonテストスイートを実行します。TESTTIMEOUT
変数(秒単位)を設定して、テストタイムアウト(デフォルトでは1200:20分)を変更します。make install
:Pythonをビルドしてインストールします。make regen-all
:(ほぼ)生成されたすべてのファイルを再生成します。make regen-stdlib-module-names
とautoconf
は、生成された残りのファイルに対して別々に実行する必要があります。make clean
:ビルドされたファイルを削除します。make distclean
:make clean
と同じですが、configureスクリプトによって作成されたファイルも削除します。
3.2.4。 C拡張機能
一部のC拡張機能は、sys
モジュールなどの組み込みモジュールとして組み込まれています。 これらは、Py_BUILD_CORE_BUILTIN
マクロが定義された状態で構築されています。 組み込みモジュールには__file__
属性がありません。
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute '__file__'
他のCエクステンシンは、_asyncio
モジュールのようにダイナミックライブラリとして構築されています。 これらは、Py_BUILD_CORE_MODULE
マクロが定義された状態で構築されています。 Linux x86-64での例:
>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
>>> _asyncio.__file__
'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
Modules/Setup
は、C拡張機能を構築するためのMakefileターゲットを生成するために使用されます。 ファイルの先頭に、C拡張機能が組み込みモジュールとして組み込まれています。 *shared*
マーカーの後に定義された拡張機能は、ダイナミックライブラリとして構築されます。
setup.py
スクリプトは、 distutils モジュールを使用して共有ライブラリとしてC拡張機能のみをビルドします。
Include/pyport.h
のPyAPI_FUNC()
、PyAPI_API()
、およびPyMODINIT_FUNC()
マクロは、Py_BUILD_CORE_MODULE
マクロが定義されているかどうかによって定義が異なります。
Py_BUILD_CORE_MODULE
が定義されている場合は、Py_EXPORTED_SYMBOL
を使用します- それ以外の場合は、
Py_IMPORTED_SYMBOL
を使用してください。
共有ライブラリとして構築されたC拡張機能でPy_BUILD_CORE_BUILTIN
マクロが誤って使用された場合、そのPyInit_xxx()
関数はエクスポートされず、インポート時に ImportError が発生します。
3.3。 コンパイラとリンカのフラグ
./configure
スクリプトと環境変数によって設定され、Makefile
によって使用されるオプション。
3.3.1。 プリプロセッサフラグ
- CONFIGURE_CPPFLAGS
./configure
スクリプトに渡される CPPFLAGS 変数の値。バージョン3.6の新機能。
- CPPFLAGS
(Objective)C / C ++プリプロセッサフラグ(例:
-I<include dir>
非標準ディレクトリにヘッダーがある場合<include dir>
。CPPFLAGS と LDFLAGS の両方に、で指定されたディレクトリを使用して拡張モジュールを構築できるようにするためのsetup.pyのシェルの値が含まれている必要があります。環境変数。
- BASECPPFLAGS
バージョン3.4の新機能。
- PY_CPPFLAGS
インタプリタオブジェクトファイルを構築するために追加された追加のプリプロセッサフラグ。
デフォルト:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
。バージョン3.2の新機能。
3.3.2。 コンパイラフラグ
- CC
Cコンパイラコマンド。
例:
gcc -pthread
。
- MAINCC
python
などのプログラムのmain()
関数をビルドするために使用されるCコンパイラコマンド。configureスクリプトの-with-cxx-main オプションによって設定された変数。
デフォルト:
$(CC)
。
- CXX
C ++コンパイラコマンド。
-with-cxx-main オプションが使用されている場合に使用されます。
例:
g++ -pthread
。
- CFLAGS
- Cコンパイラフラグ。
- CFLAGS_NODIST
CFLAGS_NODIST は、インタープリターとstdlibC拡張機能の構築に使用されます。 Pythonがインストールされた後、コンパイラフラグがdistutils CFLAGS の一部であってはならない場合に使用します(:issue: `21121` ) 。
バージョン3.5の新機能。
- EXTRA_CFLAGS
- 追加のCコンパイラフラグ。
- CONFIGURE_CFLAGS
./configure
スクリプトに渡される CFLAGS 変数の値。バージョン3.2の新機能。
- CONFIGURE_CFLAGS_NODIST
./configure
スクリプトに渡される CFLAGS_NODIST 変数の値。バージョン3.5の新機能。
- BASECFLAGS
- 基本コンパイラフラグ。
- OPT
- 最適化フラグ。
- CFLAGS_ALIASING
Python/dtoa.c
のコンパイルに使用される厳密または非厳密なエイリアシングフラグ。バージョン3.7の新機能。
- CCSHARED
共有ライブラリの構築に使用されるコンパイラフラグ。
たとえば、
-fPIC
はLinuxおよびBSDで使用されます。
- CFLAGSFORSHARED
インタプリタオブジェクトファイルを構築するために追加された追加のCフラグ。
デフォルト: -enable-shared が使用されている場合は
$(CCSHARED)
、それ以外の場合は空の文字列。
- PY_CFLAGS
- デフォルト:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
。
- PY_CFLAGS_NODIST
デフォルト:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal
。バージョン3.5の新機能。
- PY_STDMODULE_CFLAGS
インタプリタオブジェクトファイルの構築に使用されるCフラグ。
デフォルト:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)
。バージョン3.7の新機能。
- PY_CORE_CFLAGS
デフォルト:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
。バージョン3.2の新機能。
- PY_BUILTIN_MODULE_CFLAGS
posix モジュールのように、標準ライブラリ拡張モジュールを組み込みモジュールとしてビルドするためのコンパイラフラグ。
デフォルト:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN
。バージョン3.8の新機能。
- PURIFY
浄化コマンド。 Purifyはメモリデバッガプログラムです。
デフォルト:空の文字列(使用されません)。
3.3.3。 リンカーフラグ
- LINKCC
python
や_testembed
などのプログラムをビルドするために使用されるリンカーコマンド。デフォルト:
$(PURIFY) $(MAINCC)
。
- CONFIGURE_LDFLAGS
./configure
スクリプトに渡される LDFLAGS 変数の値。CFLAGS 、 LDFLAGS などの割り当ては避けてください。 そのため、ユーザーはコマンドラインでそれらを使用して、事前設定された値を踏むことなくこれらの値に追加できます。
バージョン3.2の新機能。
- LDFLAGS_NODIST
- LDFLAGS_NODIST は、 CFLAGS_NODIST と同じ方法で使用されます。 Pythonのインストール後にリンカーフラグをdistutils LDFLAGS の一部にしないにする必要がある場合に使用します(:issue: `35257` ) 。
- CONFIGURE_LDFLAGS_NODIST
LDFLAGS_NODIST 変数の値が
./configure
スクリプトに渡されました。バージョン3.8の新機能。
- LDFLAGS
リンカーフラグ、例: 非標準ディレクトリ
<lib dir>
にライブラリがある場合は-L<lib dir>
。CPPFLAGS と LDFLAGS の両方に、で指定されたディレクトリを使用して拡張モジュールを構築できるようにするためのsetup.pyのシェルの値が含まれている必要があります。環境変数。
- LIBS
Python実行可能ファイルをリンクするときに、ライブラリをリンカーに渡すためのリンカーフラグ。
例:
-lrt
。
- LDSHARED
共有ライブラリを構築するコマンド。
デフォルト:
@LDSHARED@ $(PY_LDFLAGS)
。
- BLDSHARED
libpython
共有ライブラリを構築するコマンド。デフォルト:
@BLDSHARED@ $(PY_CORE_LDFLAGS)
。
- PY_LDFLAGS
- デフォルト:
$(CONFIGURE_LDFLAGS) $(LDFLAGS)
。
- PY_LDFLAGS_NODIST
デフォルト:
$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)
。バージョン3.8の新機能。
- PY_CORE_LDFLAGS
インタプリタオブジェクトファイルの構築に使用されるリンカフラグ。
バージョン3.8の新機能。