3. Konfigurera Python

3.1. Krav för byggnation

Funktioner och minimiversioner som krävs för att bygga CPython:

  • En C11 kompilator. Valfria C11-egenskaper krävs inte.

  • På Windows krävs Microsoft Visual Studio 2017 eller senare.

  • Stöd för IEEE 754 flyttal och Floating-point Not-a-Number (NaN).

  • Stöd för trådar.

  • OpenSSL 1.1.1 är minimiversionen och OpenSSL 3.0.16 är den rekommenderade minimiversionen för tilläggsmodulerna ssl och hashlib.

  • SQLite 3.15.2 för tilläggsmodulen sqlite3.

  • Tcl/Tk 8.5.12 för modulen tkinter.

  • libmpdec 2.5.0 för modulen decimal.

  • Autoconf 2.72 och aclocal 1.16.5 krävs för att återskapa configure-skriptet.

Ändrad i version 3.1: Tcl/Tk version 8.3.1 krävs nu.

Ändrad i version 3.5: På Windows krävs nu Visual Studio 2015 eller senare. Tcl/Tk version 8.4 krävs nu.

Ändrad i version 3.6: Vissa C99-funktioner är nu obligatoriska, t.ex. <stdint.h> och static inline-funktioner.

Ändrad i version 3.7: Trådstöd och OpenSSL 1.0.2 är nu obligatoriska.

Ändrad i version 3.10: OpenSSL 1.1.1 krävs nu. SQLite 3.7.15 krävs.

Ändrad i version 3.11: C11-kompilator, IEEE 754 och NaN-stöd är nu obligatoriska. På Windows krävs Visual Studio 2017 eller senare. Tcl/Tk version 8.5.12 krävs nu för modulen tkinter.

Ändrad i version 3.13: Autoconf 2.71, aclocal 1.16.5 och SQLite 3.15.2 är nu obligatoriska.

Ändrad i version 3.14: Autoconf 2.72 är nu ett krav.

Se även PEP 7 ”Style Guide for C Code” och PEP 11 ”CPython platform support”.

3.2. Genererade filer

För att minska byggberoenden innehåller Pythons källkod flera genererade filer. Kommandon för att regenerera alla genererade filer:

make regen-all
make regen-stdlib-modul-namn
make regen-limited-abi
make regen-configure

Filen Makefile.pre.in dokumenterar genererade filer, deras indata och verktyg som används för att regenerera dem. Sök efter regen-* make-mål.

3.2.1. konfigurationsskript

Kommandot make regen-configure regenererar filen aclocal.m4 och skriptet configure med hjälp av skalskriptet Tools/build/regen-configure.sh som använder en Ubuntu-container för att få samma verktygsversioner och få en reproducerbar utdata.

Containern är valfri, följande kommando kan köras lokalt:

autoreconf -ivf -Werror

De genererade filerna kan ändras beroende på de exakta versionerna av autoconf-archive, aclocal och pkg-config.

3.3. Konfigurera inställningar

Lista alla skriptalternativ för configure med:

./konfigurera --hjälp

Se även Misc/SpecialBuilds.txt i Python-källdistributionen.

3.3.1. Allmänna inställningar

--enable-loadable-sqlite-extensions

Stöd för laddningsbara tillägg i tilläggsmodulen _sqlite (standard är no) i modulen sqlite3.

Se metoden sqlite3.Connection.enable_load_extension() i modulen sqlite3.

Tillagd i version 3.6.

--disable-ipv6

Inaktivera IPv6-stöd (aktiverat som standard om det stöds), se modulen socket.

--enable-big-digits=[15|30]

Definiera storleken i bitar för Python int-siffror: 15 eller 30 bitar.

Som standard är sifferstorleken 30.

Definiera PYLONG_BITS_IN_DIGIT till 15 eller 30.

Se sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

Ange suffixet för Pythons körbara filer till SUFFIX.

Standardsuffixet är .exe på Windows och macOS (python.exe körbar), .js på Emscripten node, .html på Emscripten browser, .wasm på WASI och en tom sträng på andra plattformar (python körbar).

Ändrad i version 3.11: Standardsuffixet på WASM-plattformen är ett av följande: .js, .html eller .wasm.

--with-tzpath=<list of absolute paths separated by pathsep>

Välj standardsökväg för tidszon för zoneinfo.TZPATH. Se Kompileringstidskonfiguration i modulen zoneinfo.

Standard: /usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.

Se os.pathsep sökvägsseparator.

Tillagd i version 3.9.

--without-decimal-contextvar

Bygg tilläggsmodulen _decimal med en trådlokal kontext istället för en koroutinlokal kontext (standard), se modulen decimal.

Se decimal.HAVE_CONTEXTVAR och modulen contextvars.

Tillagd i version 3.9.

--with-dbmliborder=<list of backend names>

Åsidosätt ordning för att kontrollera db-backends för modulen dbm

Ett giltigt värde är en kolonseparerad (:) sträng med backend-namnen:

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

Inaktivera tvingande av C-lokal till en UTF-8-baserad lokal (aktiverad som standard).

Definiera inte makrot PY_COERCE_C_LOCALE.

Se PYTHONCOERCECLOCALE och PEP 538.

--with-platlibdir=DIRNAME

Namn på Python-bibliotekets katalog (standard är lib).

Fedora och SuSE använder lib64 på 64-bitars plattformar.

Se sys.platlibdir.

Tillagd i version 3.9.

--with-wheel-pkg-dir=PATH

Katalog med hjulpaket som används av modulen ensurepip (ingen som standard).

Vissa Linux-distributioners paketeringspolicyer rekommenderar att man inte buntar beroenden. Fedora installerar till exempel hjulpaket i katalogen /usr/share/python-wheels/ och installerar inte paketet ensurepip._bundled.

Tillagd i version 3.10.

--with-pkg-config=[check|yes|no]

Om configure ska använda pkg-config för att upptäcka byggberoenden.

  • check (standard): pkg-config är valfritt

  • yes: pkg-config är obligatoriskt

  • no: configure använder inte pkg-config även om det finns

Tillagd i version 3.11.

--enable-pystats

Aktivera insamling av intern Python-prestandastatistik.

Som standard är statistikinsamling avstängd. Använd kommandot python3 -X pystats eller ange miljövariabeln PYTHONSTATS=1 för att aktivera statistikinsamling vid Python-start.

Vid Python-avslut, dumpa statistik om statistikinsamling var aktiverad och inte rensad.

Effekter:

  • Lägg till -X pystats kommandoradsoption.

  • Lägg till PYTHONSTATS miljövariabel.

  • Definiera makrot Py_STATS.

  • Lägg till funktioner i modulen sys:

    • sys._stats_on(): Slår på statistikinsamling.

    • sys._stats_off(): Stänger av statistikinsamling.

    • sys._stats_clear(): Rensar statistiken.

    • sys._stats_dump(): Dumpar statistik till fil och rensar statistiken.

Statistiken dumpas till en godtycklig (förmodligen unik) fil i /tmp/py_stats/ (Unix) eller C:\temp\py_stats\ (Windows). Om den katalogen inte finns skrivs resultaten ut på stderr.

Använd Tools/scripts/summarize_stats.py för att läsa statistiken.

Statistik:

  • Opcode:

    • Specialisering: framgång, misslyckande, träff, uppskjuten, miss, deopt, misslyckanden;

    • Exekveringsantal;

    • Antal par.

  • Ring:

    • Python-ringningar;

    • PyEval ringer;

    • Ramar tryckta;

    • Ramobjekt skapat;

    • Eval anrop: vektor, generator, legacy, funktion VECTORCALL, build class, slot, funktion ”ex”, API, metod.

  • Objekt:

    • incref och decref;

    • tolk incref och decref;

    • allokeringar: alla, 512 byte, 4 kiB, stor;

    • gratis;

    • till/från fria listor;

    • ordbok materialiserad/dematerialiserad;

    • typ cache;

    • optimeringsförsök;

    • optimeringsspår skapade/utförda;

    • uops avrättade.

  • Sopsamlare:

    • Insamling av sopor;

    • Besökta objekt;

    • Föremål som samlats in.

Tillagd i version 3.11.

--disable-gil

Aktiverar stöd för att köra Python utan global interpreter lock (GIL): free threading build.

Definierar makrot Py_GIL_DISABLED och lägger till "t" i sys.abiflags.

Se Fri trådad CPython för mer information.

Tillagd i version 3.13.

--enable-experimental-jit=[no|yes|yes-off|interpreter]

Ange hur man integrerar experimentell just-in-time-kompilator.

  • no: Bygg inte JIT.

  • ja: Aktivera JIT. Om du vill inaktivera den under körning ställer du in miljövariabeln PYTHON_JIT=0.

  • yes-off: Bygg JIT, men inaktivera den som standard. För att aktivera den vid körning, ställ in miljövariabeln PYTHON_JIT=1.

  • Tolk: Aktivera ”JIT-tolken” (endast användbar för dem som felsöker själva JIT). För att inaktivera den vid körning, ställ in miljövariabeln PYTHON_JIT=0.

--enable-experimental-jit=no är standardbeteendet om alternativet inte tillhandahålls, och --enable-experimental-jit är en förkortning för --enable-experimental-jit=yes. Se Tools/jit/README.md för mer information, inklusive hur man installerar de nödvändiga byggtidsberoendena.

Anteckning

När du bygger CPython med JIT aktiverat måste du se till att ditt system har Python 3.11 eller senare installerat.

Tillagd i version 3.13.

PKG_CONFIG

Sökväg till verktyget pkg-config.

PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH

pkg-config alternativ.

3.3.2. Alternativ för C-kompilator

CC

Kommando för C-kompilator.

CFLAGS

Flaggor för C-kompilator.

CPP

C preprocessor-kommando.

CPPFLAGS

C preprocessorflaggor, t.ex. -Iinclude_dir.

3.3.3. Alternativ för länkare

LDFLAGS

Länkningsflaggor, t.ex. -Llibrary_directory.

LIBS

Bibliotek att skicka till länkaren, t.ex. -llibrary.

MACHDEP

Namn för maskinberoende biblioteksfiler.

3.3.4. Alternativ för tredjepartsberoenden

Tillagd i version 3.11.

BZIP2_CFLAGS
BZIP2_LIBS

Flaggor för C-kompilator och länkare för att länka Python till libbz2, används av modulen bz2`, åsidosätter pkg-config.

CURSES_CFLAGS
CURSES_LIBS

C-kompilator- och länkarflaggor för libncurses eller libncursesw, används av curses-modulen, åsidosätter pkg-config.

GDBM_CFLAGS
GDBM_LIBS

C-kompilator- och länkarflaggor för gdbm.

LIBB2_CFLAGS
LIBB2_LIBS

C-kompilator- och länkflaggor för libb2 (BLAKE2), som används av modulen hashlib, som åsidosätter pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

C-kompilator- och länkarflaggor för libedit, används av modulen readline` och åsidosätter pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

C-kompilator- och länkarflaggor för libffi, används av ctypes-modulen, åsidosätter pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

C-kompilator- och länkarflaggor för libmpdec, används av decimal-modulen, åsidosätter pkg-config.

Anteckning

Dessa miljövariabler har ingen effekt om inte --with-system-libmpdec har angetts.

LIBLZMA_CFLAGS
LIBLZMA_LIBS

C-kompilator- och länkarflaggor för liblzma, används av modulen lzma` och åsidosätter pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

C-kompilator- och länkarflaggor för libreadline, som används av modulen readline och åsidosätter pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

C-kompilator- och länkarflaggor för libsqlite3, används av sqlite3-modulen, åsidosätter pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

C-kompilator- och länkarflaggor för libuuid, används av uuid-modulen, åsidosätter pkg-config.

LIBZSTD_CFLAGS
LIBZSTD_LIBS

C-kompilator- och länkarflaggor för libzstd, används av modulen compression.zstd` och åsidosätter pkg-config.

Tillagd i version 3.14.

PANEL_CFLAGS
PANEL_LIBS

C-kompilator- och länkarflaggor för PANEL, åsidosätter pkg-config.

C-kompilator- och länkarflaggor för libpanel eller libpanelw, som används av curses.panel-modulen, åsidosätter pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

Flaggor för C-kompilator och länkare för TCLTK, åsidosätter pkg-config.

ZLIB_CFLAGS
ZLIB_LIBS

C-kompilator- och länkarflaggor för libzlib, används av modulen gzip`, åsidosätter pkg-config.

3.3.5. Alternativ för WebAssembly

--enable-wasm-dynamic-linking

Slå på dynamiskt länkningsstöd för WASM.

Dynamisk länkning möjliggör dlopen. Filstorleken för den körbara filen ökar på grund av begränsad eliminering av död kod och ytterligare funktioner.

Tillagd i version 3.11.

--enable-wasm-pthreads

Slå på stöd för pthreads för WASM.

Tillagd i version 3.11.

3.3.6. Installera alternativ

--prefix=PREFIX

Installera arkitekturoberoende filer i PREFIX. På Unix är standardvärdet /usr/local.

Detta värde kan hämtas vid körning med hjälp av sys.prefix.

Som ett exempel kan man använda --prefix="$HOME/.local/" för att installera en Python i dess hemkatalog.

--exec-prefix=EPREFIX

Installera arkitekturberoende filer i EPREFIX, standard är --prefix.

Detta värde kan hämtas vid körning med hjälp av sys.exec_prefix.

--disable-test-modules

Bygg eller installera inte testmoduler, som paketet test eller tilläggsmodulen _testcapi (byggs och installeras som standard).

Tillagd i version 3.10.

--with-ensurepip=[upgrade|install|no]

Välj kommandot ensurepip som körs vid Python-installation:

  • upgrade (standard): kör kommandot python -m ensurepip --altinstall --upgrade.

  • install: kör kommandot python -m ensurepip --altinstall;

  • no: kör inte ensurepip;

Tillagd i version 3.6.

3.3.7. Prestationsbaserade optioner

Konfigurering av Python med --enable-optimizations --with-lto (PGO + LTO) rekommenderas för bästa prestanda. Den experimentella flaggan --enable-bolt kan också användas för att förbättra prestanda.

--enable-optimizations

Aktivera Profile Guided Optimization (PGO) med hjälp av PROFILE_TASK (inaktiverad som standard).

C-kompilatorn Clang kräver programmet llvm-profdata för PGO. På macOS kräver GCC också det: GCC är bara ett alias för Clang på macOS.

Inaktivera även semantisk interposition i libpython om --enable-shared och GCC används: lägg till -fno-semantic-interposition till kompilator- och länkflaggorna.

Anteckning

Under byggandet kan du stöta på kompilatorvarningar om att profildata inte är tillgängliga för vissa källfiler. Dessa varningar är ofarliga, eftersom endast en delmängd av koden utövas under profildatainsamling. För att inaktivera dessa varningar på Clang, undertrycker du dem manuellt genom att lägga till -Wno-profile-instr-unprofiled till CFLAGS.

Tillagd i version 3.6.

Ändrad i version 3.10: Använd -fno-semantic-interposition på GCC.

PROFILE_TASK

Miljövariabel som används i Makefile: Python-kommandoradsargument för PGO-genereringsuppgiften.

Standard: -m test --pgo --timeout=$(TESTTIMEOUT).

Tillagd i version 3.8.

Ändrad i version 3.13: Uppgiftsbrott ignoreras inte längre i tysthet.

--with-lto=[full|thin|no|yes]

Aktivera Link Time Optimization (LTO) i valfri byggnad (inaktiverad som standard).

C-kompilatorn Clang kräver llvm-ar för LTO (ar på macOS), samt en LTO-medveten linker (ld.gold eller lld).

Tillagd i version 3.6.

Tillagd i version 3.11: För att använda ThinLTO-funktionen, använd --with-lto=thin på Clang.

Ändrad i version 3.12: Använd ThinLTO som standardoptimeringspolicy för Clang om kompilatorn accepterar flaggan.

--enable-bolt

Aktivera användning av BOLT post-link binary optimizer (inaktiverad som standard).

BOLT är en del av LLVM-projektet men ingår inte alltid i deras binära distributioner. Denna flagga kräver att llvm-bolt och merge-fdata är tillgängliga.

BOLT är fortfarande ett ganska nytt projekt så den här flaggan bör betraktas som experimentell för tillfället. Eftersom detta verktyg arbetar med maskinkod är dess framgång beroende av en kombination av byggmiljön + de andra optimeringskonfigurationsarggen + CPU-arkitekturen, och inte alla kombinationer stöds. BOLT-versioner före LLVM 16 är kända för att krascha BOLT under vissa scenarier. Användning av LLVM 16 eller nyare för BOLT-optimering uppmuntras starkt.

Variablerna BOLT_INSTRUMENT_FLAGS och BOLT_APPLY_FLAGS configure kan definieras för att åsidosätta standarduppsättningen argument för llvm-bolt för att instrumentera respektive tillämpa BOLT-data på binärfiler.

Tillagd i version 3.12.

BOLT_APPLY_FLAGS

Argument till llvm-bolt när man skapar en BOLT-optimerad binär.

Tillagd i version 3.12.

BOLT_INSTRUMENT_FLAGS

Argument till llvm-bolt vid instrumentering av binärfiler.

Tillagd i version 3.12.

--with-computed-gotos

Aktivera beräknade gotos i utvärderingsloopen (aktiverat som standard på kompilatorer som stöds).

--with-tail-call-interp

Aktivera tolkar som använder tail-anrop i CPython. Om det är aktiverat rekommenderas starkt att aktivera PGO (--enable-optimizations). Detta alternativ kräver specifikt en C-kompilator med korrekt stöd för tail call och anropskonventionen preserve_none. Till exempel stöder Clang 19 och nyare denna funktion.

Tillagd i version 3.14.

--without-mimalloc

Inaktivera den snabba mimalloc -allokatorn (aktiverad som standard).

Se även PYTHONMALLOC miljövariabel.

--without-pymalloc

Inaktivera Pythons specialiserade minnesallokering pymalloc (aktiverad som standard).

Se även PYTHONMALLOC miljövariabel.

--without-doc-strings

Inaktivera statiska dokumentationssträngar för att minska minnesavtrycket (aktiverat som standard). Dokumentationssträngar som definieras i Python påverkas inte.

Definiera inte makrot WITH_DOC_STRINGS.

Se makrot PyDoc_STRVAR().

--enable-profiling

Aktivera kodprofilering på C-nivå med gprof (inaktiverad som standard).

--with-strict-overflow

Lägg till -fstrict-overflow i C-kompilatorns flaggor (som standard lägger vi till -fno-strict-overflow istället).

--without-remote-debug

Avaktivera stödet för fjärrfelsökning som beskrivs i PEP 768 (aktiverat som standard). När denna flagga anges kompileras inte den kod som gör det möjligt för tolken att schemalägga exekveringen av en Python-fil i en separat process enligt beskrivningen i PEP 768. Detta inkluderar både funktionaliteten för att schemalägga kod som ska exekveras och funktionaliteten för att ta emot kod som ska exekveras.

Py_REMOTE_DEBUG

Detta makro är definierat som standard, såvida inte Python konfigureras med --without-remote-debug.

Observera att även om makrot är definierat är det inte säkert att fjärrfelsökning är tillgänglig (t.ex. på en inkompatibel plattform).

Tillagd i version 3.14.

3.3.8. Python Debug Build

En felsökningsversion är Python som byggts med konfigurationsalternativet --with-pydebug.

Effekter av en debug-byggnad:

  • Visa alla varningar som standard: listan över standardvarningsfilter är tom i modulen warnings.

  • Lägg till d i sys.abiflags.

  • Lägg till sys.gettotalrefcount() funktion.

  • Lägg till -X showrefcount kommandoradsoption.

  • Lägg till kommandoradsalternativet -d och miljövariabeln PYTHONDEBUG för att felsöka parsern.

  • Lägg till stöd för variabeln __lltrace__: aktivera lågnivåspårning i bytekodsutvärderingsloopen om variabeln är definierad.

  • Installera felsöknings-hooks på minnesallokerare för att upptäcka buffertöverskridanden och andra minnesfel.

  • Definiera makron Py_DEBUG och Py_REF_DEBUG.

  • Lägg till körtidskontroller: kod omgiven av #ifdef Py_DEBUG och #endif. Aktivera assert(...) och _PyObject_ASSERT(...) påståenden: ställ inte in makrot NDEBUG (se även konfigurationsalternativet --with-assertions). Huvudsakliga körtidskontroller:

    • Lägg till sanitetskontroller av funktionsargument.

    • Unicode- och int-objekt skapas med minnet fyllt med ett mönster för att upptäcka användning av oinitialiserade objekt.

    • Se till att funktioner som kan rensa eller ersätta det aktuella undantaget inte anropas med ett undantag aktiverat.

    • Kontrollera att deallokeringsfunktioner inte ändrar det aktuella undantaget.

    • Skräpsamlaren (gc.collect() function) gör några grundläggande kontroller av objektens konsistens.

    • Makrot Py_SAFE_DOWNCAST() kontrollerar för heltalsunderflöde och heltalsöverflöde vid downcasting från breda typer till smala typer.

Se även Python Development Mode och --with-trace-refs configure option.

Ändrad i version 3.8: Release- och debug-byggen är nu ABI-kompatibla: att definiera makrot Py_DEBUG innebär inte längre makrot Py_TRACE_REFS (se alternativet --with-trace-refs).

3.3.9. Alternativ för felsökning

--with-pydebug

Bygga Python i felsökningsläge: definiera makrot Py_DEBUG (inaktiverat som standard).

--with-trace-refs

Aktivera spårningsreferenser för felsökning (avaktiverad som standard).

Effekter:

Miljövariabeln PYTHONDUMPREFS kan användas för att dumpa objekt och referensräkningar som fortfarande lever när Python avslutas.

Statiskt allokerade objekt spåras inte.

Tillagd i version 3.8.

Ändrad i version 3.13: Den här byggnaden är nu ABI-kompatibel med release build och debug build.

--with-assertions

Bygg med C-assertioner aktiverade (standard är nej): assert(...); och _PyObject_ASSERT(...);.

Om den är inställd definieras inte makrot NDEBUG i kompilatorvariabeln OPT.

Se även --with-pydebug option (debug build) som också möjliggör påståenden.

Tillagd i version 3.6.

--with-valgrind

Aktivera stöd för Valgrind (standard är nej).

--with-dtrace

Aktivera stöd för DTrace (standard är nej).

Se Instrumentering av CPython med DTrace och SystemTap.

Tillagd i version 3.6.

--with-address-sanitizer

Aktivera AddressSanitizer minnesfelsdetektor, asan (standard är nej). För att förbättra ASan-detekteringsmöjligheterna kanske du också vill kombinera detta med --without-pymalloc för att inaktivera den specialiserade allokeringen av små objekt vars allokeringar inte spåras av ASan.

Tillagd i version 3.6.

--with-memory-sanitizer

Aktivera MemorySanitizer allokeringsfelsdetektor, msan (standard är nej).

Tillagd i version 3.6.

--with-undefined-behavior-sanitizer

Aktivera UndefinedBehaviorSanitizer detektor för odefinierat beteende, ubsan (standard är nej).

Tillagd i version 3.6.

--with-thread-sanitizer

Aktivera ThreadSanitizers datarace-detektor, tsan (standard är nej).

Tillagd i version 3.13.

3.3.10. Alternativ för länkare

--enable-shared

Aktivera byggandet av ett delat Python-bibliotek: libpython (standard är nej).

--without-static-libpython

Bygg inte libpythonMAJOR.MINOR.a och installera inte python.o (byggs och aktiveras som standard).

Tillagd i version 3.10.

3.3.11. Alternativ för bibliotek

--with-libs='lib1 ...'

Länka mot ytterligare bibliotek (standard är nej).

--with-system-expat

Bygg pyexpat-modulen med hjälp av ett installerat expat-bibliotek (standard är no).

--with-system-libmpdec

Bygg tilläggsmodulen _decimal med hjälp av ett installerat mpdecimal-bibliotek, se modulen decimal (standard är yes).

Tillagd i version 3.3.

Ändrad i version 3.13: Standard är att använda det installerade biblioteket mpdecimal.

Deprecated since version 3.13, will be removed in version 3.15: En kopia av källorna till biblioteket mpdecimal kommer inte längre att distribueras med Python 3.15.

--with-readline=readline|editline

Utse ett backend-bibliotek för modulen readline.

  • readline: Använd readline som backend.

  • editline: Använd editline som backend.

Tillagd i version 3.10.

--without-readline

Bygg inte modulen readline (byggs som standard).

Definiera inte makrot HAVE_LIBREADLINE.

Tillagd i version 3.10.

--with-libm=STRING

Åsidosätt matematikbiblioteket libm till STRING (standard är systemberoende).

--with-libc=STRING

Åsidosätt C-biblioteket libc till STRING (standard är systemberoende).

--with-openssl=DIR

Rot till OpenSSL-katalogen.

Tillagd i version 3.7.

--with-openssl-rpath=[no|auto|DIR]

Ange katalog för runtime-bibliotek (rpath) för OpenSSL-bibliotek:

  • no (standard): Ställ inte in rpath;

  • auto: autodetektera rpath från --with-openssl och pkg-config;

  • DIR: ange en explicit rpath.

Tillagd i version 3.10.

3.3.12. Säkerhetsalternativ

--with-hash-algorithm=[fnv|siphash13|siphash24]

Välj hashalgoritm för användning i Python/pyhash.c:

  • siphash13 (standard);

  • siphash24;

  • fnv.

Tillagd i version 3.4.

Tillagd i version 3.11: siphash13 läggs till och det är den nya standardinställningen.

--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2

Inbyggda hashmoduler:

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (med skakning);

  • blake2.

Tillagd i version 3.9.

--with-ssl-default-suites=[python|openssl|STRING]

Åsidosätta OpenSSL:s standardsträng för chiffersviter:

  • python (standard): använd Pythons föredragna val;

  • openssl: lämna OpenSSL:s standardinställningar orörda;

  • STRING: använd en anpassad sträng

Se modulen ssl.

Tillagd i version 3.7.

Ändrad i version 3.10: Inställningarna python och STRING anger också TLS 1.2 som minsta protokollversion.

--disable-safety

Inaktivera kompilatoralternativ som rekommenderas av OpenSSF av säkerhetsskäl utan prestandaöverskott. Om detta alternativ inte är aktiverat kommer CPython att byggas baserat på säkerhetskompilatoralternativ utan att det går långsammare. När det här alternativet är aktiverat kommer CPython inte att byggas med de kompilatoralternativ som anges nedan.

Följande kompilatoralternativ inaktiveras med --disable-safety:

Tillagd i version 3.14.

--enable-slower-safety

Aktivera kompilatoralternativ som rekommenderas av OpenSSF av säkerhetsskäl som kräver overhead. Om detta alternativ inte är aktiverat kommer CPython inte att byggas baserat på säkerhetskompilatoralternativ som påverkar prestandan. När det här alternativet är aktiverat kommer CPython att byggas med de kompilatoralternativ som anges nedan.

Följande kompilatoralternativ aktiveras med --enable-slower-safety:

  • -D_FORTIFY_SOURCE=3: Förstärk källorna med kompilerings- och körtidskontroller för osäker libc-användning och buffertöverskridanden.

Tillagd i version 3.14.

3.3.13. macOS-alternativ

Se Mac/README.rst.

--enable-universalsdk
--enable-universalsdk=SDKDIR

Skapa ett universellt binärt bygge. SDKDIR anger vilket macOS SDK som ska användas för att utföra byggandet (standard är nej).

--enable-framework
--enable-framework=INSTALLDIR

Skapa ett Python.framework i stället för en traditionell Unix-installation. Valfritt INSTALLDIR anger installationssökvägen (standard är ingen).

--with-universal-archs=ARCH

Ange vilken typ av universell binärfil som ska skapas. Detta alternativ är endast giltigt när --enable-universalsdk är inställt.

Alternativ:

  • universal2 (x86-64 och arm64);

  • 32-bitars (PPC och i386);

  • 64-bitars (PPC64 och x86-64);

  • 3-vägs (i386, PPC och x86-64);

  • intel (i386 och x86-64);

  • intel-32 (i386);

  • intel-64 (x86-64);

  • all (PPC, i386, PPC64 och x86-64).

Observera att värdena för detta konfigurationsobjekt inte är desamma som de identifierare som används för universella binära hjul på macOS. Se användarhandboken för Python Packaging för mer information om de kompatibilitetstaggar för paketeringsplattform som används på macOS

--with-framework-name=FRAMEWORK

Ange namnet på Python-ramverket på MacOS, endast giltigt när --enable-framework är inställt (standard: Python).

--with-app-store-compliance
--with-app-store-compliance=PATCH-FILE

Pythons standardbibliotek innehåller strängar som är kända för att utlösa fel i automatiserade inspektionsverktyg när de skickas in för distribution av macOS- och iOS-appbutikerna. Om det här alternativet är aktiverat tillämpas listan över korrigeringar som är kända för att korrigera appbutikens efterlevnad. En anpassad patchfil kan också anges. Det här alternativet är inaktiverat som standard.

Tillagd i version 3.13.

3.3.14. iOS-alternativ

Se iOS/README.rst.

--enable-framework=INSTALLDIR

Skapa ett Python.framework. Till skillnad från macOS är argumentet INSTALLDIR som anger installationssökvägen obligatoriskt.

--with-framework-name=FRAMEWORK

Ange namnet på ramverket (standard: Python).

3.3.15. Alternativ för korskompilering

Cross Compiling, även känt som Cross Building, kan användas för att bygga Python för en annan CPU-arkitektur eller plattform. Korskompilering kräver en Python-tolk för byggplattformen. Versionen av den byggda Python måste överensstämma med versionen av den korskompilerade värd-Python.

--build=BUILD

configure för att bygga på BUILD, vanligtvis gissat av config.guess.

--host=HOST

korskompilera för att bygga program som kan köras på HOST (målplattform)

--with-build-python=path/to/python

sökväg för att bygga python binär för korskompilering

Tillagd i version 3.11.

CONFIG_SITE=file

En miljövariabel som pekar på en fil med åsidosättningar för konfigurering.

Exempel på fil config.site:

# config.site-aarch64
ac_cv_buggy_getaddrinfo=nej
ac_cv_file__dev_ptmx=ja
ac_cv_file__dev_ptc=nej
HOSTRUNNER

Program för att köra CPython för värdplattformen för korskompilering.

Tillagd i version 3.11.

Korskompilering av exempel:

CONFIG_SITE=config.site-aarch64 ../configure \
    --build=x86_64-pc-linux-gnu \
    --host=aarch64-okänd-linux-gnu \
    --med-build-python=../x86_64/python

3.4. Python byggsystem

3.4.1. Huvudfiler för byggsystemet

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (skapad av configure);

  • pyconfig.h (skapad av configure);

  • Modules/Setup: C-tillägg som byggs av Makefile med hjälp av skalskriptet Module/makesetup;

3.4.2. Huvudsakliga byggsteg

  • C-filer (.c) byggs som objektfiler (.o).

  • Ett statiskt libpython-bibliotek (.a) skapas från objektfiler.

  • python.o och det statiska libpython-biblioteket länkas till det slutliga python-programmet.

  • C-tillägg byggs av Makefile (se Modules/Setup).

3.4.3. Huvudsakliga Makefile-mål

3.4.3.1. göra

För det mesta, när du bygger om efter att ha redigerat lite kod eller uppdaterat din utcheckning från uppströms, är allt du behöver göra att köra make, som (enligt Make’s semantik) bygger standardmålet, det första som definieras i Makefile. Av tradition (inklusive i CPython-projektet) är detta vanligtvis all-målet. Skriptet configure utökar en autoconf-variabel, @DEF_MAKE_ALL_RULE@ för att beskriva exakt vilka mål make all ska bygga. De tre alternativen är:

  • profile-opt (konfigureras med --enable-optimizations)

  • build_wasm (väljs om värdplattformen matchar wasm32-wasi* eller wasm32-emscripten)

  • build_all (konfigureras utan att uttryckligen använda någon av de andra)

Beroende på de senaste ändringarna i källfilen kommer Make att bygga om alla mål (objektfiler och körbara filer) som anses vara föråldrade, inklusive att köra configure igen om det behövs. Käll-/målberoenden är dock många och underhålls manuellt, så Make har ibland inte all information som krävs för att korrekt upptäcka alla mål som behöver byggas om. Beroende på vilka mål som inte byggs om kan du uppleva ett antal problem. Om du har bygg- eller testproblem som du inte kan förklara på annat sätt, bör make clean && make lösa de flesta beroendeproblem, på bekostnad av längre byggtider.

3.4.3.2. skapa plattform

Bygg programmet python, men bygg inte standardbibliotekets tilläggsmoduler. Detta genererar en fil med namnet platform som innehåller en enda rad som beskriver detaljerna för byggplattformen, t.ex. macosx-14.3-arm64-3.12 eller linux-x86_64-3.13.

3.4.3.3. göra profil-opt

Bygg Python med hjälp av profilstyrd optimering (PGO). Du kan använda alternativet configure --enable-optimizations för att göra detta till standardmålet för kommandot make (make all eller bara make).

3.4.3.4. göra rent

Ta bort byggda filer.

3.4.3.5. göra rent

Förutom det arbete som görs av make clean, ta bort filer som skapats av configure-skriptet. configure måste köras innan det kan byggas igen. [1]

3.4.3.6. gör installation

Bygg målet all och installera Python.

3.4.3.7. göra test

Bygg målet all och kör Python-testsviten med alternativet --fast-ci utan GUI-tester. Variabler:

  • TESTOPTS: Ytterligare kommandoradsalternativ för regrtest.

  • TESTPYTHONOPTS: Ytterligare Python-kommandoradsalternativ.

  • TESTTIMEOUT: tidsgräns i sekunder (standard: 10 minuter).

3.4.3.8. göra ci

Detta liknar make test, men använder -ugui för att även köra GUI-tester.

Tillagd i version 3.14.

3.4.3.9. göra byggbottnen

Detta liknar make test, men använder alternativet -slow-ci och standardtimeout på 20 minuter, istället för alternativet --fast-ci.

3.4.3.10. make regen-all

Återskapa (nästan) alla genererade filer. Dessa inkluderar (men är inte begränsade till) bytecode-fall och parser-generatorfilen. make regen-stdlib-module-names och autoconf måste köras separat för de återstående genererade filerna.

3.4.4. C-tillägg

Vissa C-tillägg byggs som inbyggda moduler, till exempel modulen sys. De byggs med makrot Py_BUILD_CORE_BUILTIN definierat. Inbyggda moduler har inget __file__-attribut:

>>> 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__'

Andra C-tillägg byggs som dynamiska bibliotek, till exempel modulen _asyncio. De byggs med makrot Py_BUILD_CORE_MODULE definierat. Exempel på 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 används för att generera Makefile-mål för att bygga C-tillägg. I början av filerna byggs C-tillägg som inbyggda moduler. Tillägg som definieras efter markören *shared* byggs som dynamiska bibliotek.

Makrona PyAPI_FUNC(), PyAPI_DATA() och PyMODINIT_FUNC i Include/exports.h definieras på olika sätt beroende på om makrot Py_BUILD_CORE_MODULE är definierat:

  • Använd Py_EXPORTED_SYMBOL om Py_BUILD_CORE_MODULE är definierad

  • Använd annars Py_IMPORTED_SYMBOL.

Om makrot Py_BUILD_CORE_BUILTIN används av misstag i ett C-tillägg som byggts som ett delat bibliotek exporteras inte dess PyInit_xxx()-funktion, vilket orsakar ett ImportError vid import.

3.5. Kompilator- och länkarflaggor

Alternativ som anges av skriptet ./configure och miljövariabler och som används av Makefile.

3.5.1. Preprocessorflaggor

CONFIGURE_CPPFLAGS

Värdet på variabeln CPPFLAGS som skickas till skriptet ./configure.

Tillagd i version 3.6.

CPPFLAGS

(Objective) C/C++ preprocessorflaggor, t.ex. -Iinclude_dir om du har rubriker i en icke-standardkatalog include_dir.

Både CPPFLAGS och LDFLAGS måste innehålla skalets värde för att kunna bygga tilläggsmoduler med hjälp av de kataloger som anges i miljövariablerna.

BASECPPFLAGS

Tillagd i version 3.4.

PY_CPPFLAGS

Extra preprocessorflaggor har lagts till för att bygga tolkens objektfiler.

Standard: $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).

Tillagd i version 3.2.

3.5.2. Flaggor för kompilator

CC

Kommando för C-kompilator.

Exempel: gcc -pthread.

CXX

Kommando för C++-kompilator.

Exempel: g++ -pthread.

CFLAGS

Flaggor för C-kompilator.

CFLAGS_NODIST

CFLAGS_NODIST används för att bygga tolken och stdlib C-tillägg. Använd den när en kompilatorflagga inte ska vara en del av CFLAGS när Python är installerat (gh-65320).

I synnerhet bör CFLAGS inte innehålla:

  • kompilatorflaggan -I (för att ställa in sökvägen för include-filer). Flaggorna -I behandlas från vänster till höger, och alla flaggor i CFLAGS` har företräde framför de -I-flaggor som användaren och paketet tillhandahåller.

  • hårdare flaggor som -Werror eftersom distributioner inte kan kontrollera om paket som installeras av användare uppfyller sådana skärpta standarder.

Tillagd i version 3.5.

COMPILEALL_OPTS

Alternativ som skickas till kommandoraden compileall när PYC-filer byggs i make install. Standard: -j0.

Tillagd i version 3.12.

EXTRA_CFLAGS

Extra flaggor för C-kompilator.

CONFIGURE_CFLAGS

Värdet på variabeln CFLAGS som skickas till skriptet ./configure.

Tillagd i version 3.2.

CONFIGURE_CFLAGS_NODIST

Värdet på variabeln CFLAGS_NODIST som skickas till skriptet ./configure.

Tillagd i version 3.5.

BASECFLAGS

Flaggor för baskompilator.

OPT

Flaggor för optimering.

CFLAGS_ALIASING

Strikta eller icke-strikta aliasing-flaggor som används för att kompilera Python/dtoa.c.

Tillagd i version 3.7.

CCSHARED

Kompilatorflaggor som används för att bygga ett delat bibliotek.

Till exempel används -fPIC på Linux och BSD.

CFLAGSFORSHARED

Extra C-flaggor har lagts till för att bygga tolkens objektfiler.

Standard: $(CCSHARED) när --enable-shared används, eller en tom sträng i annat fall.

PY_CFLAGS

Standard: $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).

PY_CFLAGS_NODIST

Standard: $(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.

Tillagd i version 3.5.

PY_STDMODULE_CFLAGS

C-flaggor som används för att bygga tolkens objektfiler.

Standard: $(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).

Tillagd i version 3.7.

PY_CORE_CFLAGS

Standard: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.

Tillagd i version 3.2.

PY_BUILTIN_MODULE_CFLAGS

Kompilatorflaggor för att bygga en tilläggsmodul till standardbiblioteket som en inbyggd modul, t.ex. modulen posix.

Standard: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.

Tillagd i version 3.8.

PURIFY

Purify-kommandot. Purify är ett program för minnesfelsbrytning.

Standard: tom sträng (används inte).

3.5.3. Länkflaggor

LINKCC

Linker-kommando som används för att bygga program som python och testembed.

Standard: $(PURIFY) $(CC).

CONFIGURE_LDFLAGS

Värdet på variabeln LDFLAGS som skickas till skriptet ./configure.

Undvik att tilldela CFLAGS, LDFLAGS, etc. så att användare kan använda dem på kommandoraden för att lägga till dessa värden utan att trampa på de förinställda värdena.

Tillagd i version 3.2.

LDFLAGS_NODIST

LDFLAGS_NODIST används på samma sätt som CFLAGS_NODIST. Använd den när en länkarflagga inte ska vara en del av LDFLAGS när Python är installerat (gh-65320).

I synnerhet bör LDFLAGS inte innehålla:

  • kompilatorflaggan -L (för att ställa in sökvägen för bibliotek). Flaggorna -L behandlas från vänster till höger och alla flaggor i LDFLAGS har företräde framför de -L-flaggor som användaren och paketet tillhandahåller.

CONFIGURE_LDFLAGS_NODIST

Värdet på variabeln LDFLAGS_NODIST som skickas till skriptet ./configure.

Tillagd i version 3.8.

LDFLAGS

Länkningsflaggor, t.ex. -Llib_dir om du har bibliotek i en icke-standardkatalog lib_dir.

Både CPPFLAGS och LDFLAGS måste innehålla skalets värde för att kunna bygga tilläggsmoduler med hjälp av de kataloger som anges i miljövariablerna.

LIBS

Länkarflaggor för att skicka bibliotek till länken vid länkning av den körbara Python-filen.

Exempel: -lrt.

LDSHARED

Kommando för att bygga ett gemensamt bibliotek.

Standard: @LDSHARED@ $(PY_LDFLAGS).

BLDSHARED

Kommando för att bygga det delade biblioteket libpython.

Standard: @BLDSHARED@ $(PY_CORE_LDFLAGS).

PY_LDFLAGS

Standard: $(CONFIGURE_LDFLAGS) $(LDFLAGS).

PY_LDFLAGS_NODIST

Standard: $(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).

Tillagd i version 3.8.

PY_CORE_LDFLAGS

Länkningsflaggor som används för att bygga tolkens objektfiler.

Tillagd i version 3.8.

Fotnoter