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
ochhashlib
.SQLite 3.15.2 för tilläggsmodulen
sqlite3
.Tcl/Tk 8.5.12 för modulen
tkinter
.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 modulensqlite3
.Se metoden
sqlite3.Connection.enable_load_extension()
i modulensqlite3
.Tillagd i version 3.6.
- --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
till15
eller30
.
- --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 modulenzoneinfo
.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 modulendecimal
.Se
decimal.HAVE_CONTEXTVAR
och modulencontextvars
.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 paketetensurepip._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 valfrittyes
: pkg-config är obligatorisktno
: 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övariabelnPYTHONSTATS=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) ellerC:\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"
isys.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övariabelnPYTHON_JIT=0
.yes-off
: Bygg JIT, men inaktivera den som standard. För att aktivera den vid körning, ställ in miljövariabelnPYTHON_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övariabelnPYTHON_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
. SeTools/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 modulenbz2`
, åsidosätterpkg-config
.
- CURSES_CFLAGS¶
- CURSES_LIBS¶
C-kompilator- och länkarflaggor för
libncurses
ellerlibncursesw
, används avcurses
-modulen, åsidosätterpkg-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 modulenhashlib
, som åsidosätterpkg-config
.
- LIBEDIT_CFLAGS¶
- LIBEDIT_LIBS¶
C-kompilator- och länkarflaggor för
libedit
, används av modulenreadline`
och åsidosätterpkg-config
.
- LIBFFI_CFLAGS¶
- LIBFFI_LIBS¶
C-kompilator- och länkarflaggor för
libffi
, används avctypes
-modulen, åsidosätterpkg-config
.
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
C-kompilator- och länkarflaggor för
libmpdec
, används avdecimal
-modulen, åsidosätterpkg-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 modulenlzma`
och åsidosätterpkg-config
.
- LIBREADLINE_CFLAGS¶
- LIBREADLINE_LIBS¶
C-kompilator- och länkarflaggor för
libreadline
, som används av modulenreadline
och åsidosätterpkg-config
.
- LIBSQLITE3_CFLAGS¶
- LIBSQLITE3_LIBS¶
C-kompilator- och länkarflaggor för
libsqlite3
, används avsqlite3
-modulen, åsidosätterpkg-config
.
- LIBUUID_CFLAGS¶
- LIBUUID_LIBS¶
C-kompilator- och länkarflaggor för
libuuid
, används avuuid
-modulen, åsidosätterpkg-config
.
- LIBZSTD_CFLAGS¶
- LIBZSTD_LIBS¶
C-kompilator- och länkarflaggor för
libzstd
, används av modulencompression.zstd`
och åsidosätterpkg-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
ellerlibpanelw
, som används avcurses.panel
-modulen, åsidosätterpkg-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 modulengzip`
, åsidosätterpkg-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
.
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
tillCFLAGS
.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
ellerlld
).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
ochmerge-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
ochBOLT_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.
-
Py_REMOTE_DEBUG¶
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
isys.abiflags
.Lägg till
sys.gettotalrefcount()
funktion.Lägg till
-X showrefcount
kommandoradsoption.Lägg till kommandoradsalternativet
-d
och miljövariabelnPYTHONDEBUG
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
ochPy_REF_DEBUG
.Lägg till körtidskontroller: kod omgiven av
#ifdef Py_DEBUG
och#endif
. Aktiveraassert(...)
och_PyObject_ASSERT(...)
påståenden: ställ inte in makrotNDEBUG
(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:
Definiera makrot
Py_TRACE_REFS
.Lägg till funktionen
sys.getobjects()
.Lägg till
PYTHONDUMPREFS
miljövariabel.
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 kompilatorvariabelnOPT
.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¶
Aktivera byggandet av ett delat Python-bibliotek:
libpython
(standard är nej).
- --without-static-libpython¶
Bygg inte
libpythonMAJOR.MINOR.a
och installera intepython.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 installeratexpat
-bibliotek (standard är no).
- --with-system-libmpdec¶
Bygg tilläggsmodulen
_decimal
med hjälp av ett installeratmpdecimal
-bibliotek, se modulendecimal
(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.Se även
- --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
ochpkg-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
:-fstack-protector-strong: Aktivera körtidskontroller för stackbaserade buffertöverskridanden.
-Wtrampolines: Aktivera varningar om trampoliner som kräver körbara staplar.
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 korskompileringTillagd 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 avconfigure
);pyconfig.h
(skapad avconfigure
);Modules/Setup
: C-tillägg som byggs av Makefile med hjälp av skalskriptetModule/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 statiskalibpython
-biblioteket länkas till det slutligapython
-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 matcharwasm32-wasi*
ellerwasm32-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
omPy_BUILD_CORE_MODULE
är definieradAnvä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
ochLDFLAGS
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 avCFLAGS
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 iCFLAGS`
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 imake 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
ochtestembed
.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 somCFLAGS_NODIST
. Använd den när en länkarflagga inte ska vara en del avLDFLAGS
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 iLDFLAGS
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
ochLDFLAGS
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