3. Pythonの構成—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.10/using/configure
移動先:案内検索

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では.exepython.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コマンドを実行します。

  • installpython -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 モジュールのデフォルトの警告フィルターのリストは空です。
  • dsys.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)を設定します。

バージョン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 => Makefileconfigureによって作成されました);
  • pyconfig.hconfigureによって作成されました);
  • Modules/SetupModule/makesetupシェルスクリプトを使用してMakefileによって構築されたC拡張機能。
  • setup.pydistutils モジュールを使用して構築された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-namesautoconfは、生成された残りのファイルに対して別々に実行する必要があります。
  • make clean:ビルドされたファイルを削除します。
  • make distcleanmake 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.hPyAPI_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の新機能。