sysconfig — Ger tillgång till Pythons konfigurationsinformation

Tillagd i version 3.2.

Källkod: Lib/sysconfig


Modulen sysconfig ger tillgång till Pythons konfigurationsinformation, t.ex. listan över installationssökvägar och de konfigurationsvariabler som är relevanta för den aktuella plattformen.

Variabler för konfiguration

En Python-distribution innehåller en Makefile och en pyconfig.h header-fil som är nödvändiga för att bygga både Python-binären själv och C-tillägg från tredje part som kompileras med setuptools.

sysconfig placerar alla variabler som finns i dessa filer i en ordbok som kan nås med get_config_vars() eller get_config_var().

Observera att på Windows är det en mycket mindre uppsättning.

sysconfig.get_config_vars(*args)

Returnerar utan argument en ordbok med alla konfigurationsvariabler som är relevanta för den aktuella plattformen.

Med argument returneras en lista med värden som blir resultatet av en sökning efter varje argument i konfigurationsvariabelns ordbok.

För varje argument, om värdet inte hittas, returneras None.

sysconfig.get_config_var(name)

Returnerar värdet för en enskild variabel namn. Motsvarar get_config_vars().get(name).

Om namn inte hittas returneras None.

Exempel på användning:

>>> import sysconfig
>>> sysconfig.get_config_var('Py_ENABLE_SHARED')
0
>>> sysconfig.get_config_var('LIBDIR')
'/usr/local/lib'
>>> sysconfig.get_config_vars('AR', 'CXX')
['ar', 'g++']

Installationsvägar

Python använder ett installationsschema som skiljer sig åt beroende på plattform och installationsalternativ. Dessa scheman lagras i sysconfig under unika identifierare baserade på det värde som returneras av os.name. Schemana används av paketinstallatörer för att avgöra var filer ska kopieras till.

Python stöder för närvarande nio system:

  • posix_prefix: schema för POSIX-plattformar som Linux eller macOS. Detta är standardschemat som används när Python eller en komponent installeras.

  • posix_home: schema för POSIX-plattformar, när alternativet home används. Detta schema definierar sökvägar som ligger under ett specifikt home-prefix.

  • posix_user: schema för POSIX-plattformar, när alternativet user används. Det här schemat definierar sökvägar som ligger under användarens hemkatalog (site.USER_BASE).

  • posix_venv: schema för Python virtual environments på POSIX-plattformar; som standard är det samma som posix_prefix.

  • nt: schema för Windows. Detta är standardschemat som används när Python eller en komponent installeras.

  • nt_user: schema för Windows, när alternativet user används.

  • nt_venv: schema för Python virtuella miljöer på Windows; som standard är det samma som nt.

  • venv: ett schema med värden från antingen posix_venv eller nt_venv beroende på vilken plattform Python körs på.

  • osx_framework_user: schema för macOS, när alternativet user används.

Varje schema består i sin tur av en serie sökvägar och varje sökväg har en unik identifierare. Python använder för närvarande åtta sökvägar:

  • stdlib: katalog som innehåller Pythons standardbiblioteksfiler som inte är plattformsspecifika.

  • platstdlib: katalog som innehåller Pythons standardbiblioteksfiler som är plattformsspecifika.

  • platlib: katalog för platsspecifika, plattformsspecifika filer.

  • purelib: katalog för platsspecifika, icke-plattformsspecifika filer (’ren’ Python).

  • include: katalog för icke plattformsspecifika header-filer för Python C-API.

  • platinclude: katalog för plattformsspecifika huvudfiler för Python C-API.

  • scripts: katalog för skriptfiler.

  • data: katalog för datafiler.

Användarschema

Detta system är utformat för att vara den mest praktiska lösningen för användare som inte har skrivbehörighet till den globala katalogen site-packages eller som inte vill installera i den.

Filer kommer att installeras i underkataloger till site.USER_BASE (skrivs som userbase hädanefter). Detta schema installerar rena Python-moduler och tilläggsmoduler på samma plats (även känd som site.USER_SITE).

posix_user

Sökväg

Installationskatalog

stdlib

userbase/lib/pythonX.Y

platstdlib

userbase/lib/pythonX.Y

platlib

userbase/lib/pythonX.Y/site-packages

purelib

userbase/lib/pythonX.Y/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

nt_user

Sökväg

Installationskatalog

stdlib

userbase\PythonXY

platstdlib

userbase\PythonXY

platlib

userbase\PythonXY\site-packages

purelib

userbase\PythonXY\site-packages

include

userbase\PythonXY\Include

scripts

userbase\PythonXY\Scripts

data

userbase

osx_framework_user

Sökväg

Installationskatalog

stdlib

userbase/lib/python

platstdlib

userbase/lib/python

platlib

userbase/lib/python/site-packages

purelib

userbase/lib/python/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

Hemschema

Tanken bakom ”hemschemat” är att du bygger och underhåller en personlig samling Python-moduler. Namnet på detta schema härrör från idén om en ”hem”-katalog på Unix, eftersom det inte är ovanligt att en Unix-användare gör sin hemkatalog med en layout som liknar /usr/ eller /usr/local/. Det här schemat kan användas av vem som helst, oavsett vilket operativsystem man installerar för.

posix_home

Sökväg

Installationskatalog

stdlib

home/lib/python

platstdlib

home/lib/python

platlib

home/lib/python

purelib

home/lib/python

include

home/include/python

platinclude

home/include/python

scripts

home/bin

data

home

Prefixschema

”Prefixschemat” är användbart när du vill använda en Python-installation för att utföra byggandet/installationen (dvs. för att köra installationsskriptet), men installera moduler i tredjeparts modulkatalogen i en annan Python-installation (eller något som ser ut som en annan Python-installation). Om det här låter lite ovanligt så är det så - det är därför user- och home-schemana kommer före. Det finns dock åtminstone två kända fall där prefixschemat kommer att vara användbart.

Tänk först på att många Linux-distributioner placerar Python i /usr, snarare än i den mer traditionella /usr/local. Detta är helt i sin ordning, eftersom Python i dessa fall är en del av ”systemet” snarare än ett lokalt tillägg. Men om du installerar Python-moduler från källkod vill du förmodligen att de ska hamna i /usr/local/lib/python2.X snarare än /usr/lib/python2.X.

En annan möjlighet är ett nätverksfilsystem där det namn som används för att skriva till en fjärrkatalog skiljer sig från det namn som används för att läsa den: till exempel kan Python-tolken som nås som /usr/local/bin/python söka efter moduler i /usr/local/lib/python2.X, men dessa moduler måste installeras i till exempel /mnt/@server/export/lib/python2.X.

posix_prefix

Sökväg

Installationskatalog

stdlib

prefix/lib/pythonX.Y

platstdlib

prefix/lib/pythonX.Y

platlib

prefix/lib/pythonX.Y/site-packages

purelib

prefix/lib/pythonX.Y/site-packages

include

prefix/include/pythonX.Y

platinclude

prefix/include/pythonX.Y

scripts

prefix/bin

data

prefix

nt

Sökväg

Installationskatalog

stdlib

prefix\Lib

platstdlib

prefix\Lib

platlib

prefix\Lib\site-packages

purelib

prefix\Lib\site-packages

include

prefix\Include

platinclude

prefix\Include

scripts

prefix\Scripts

data

prefix

Funktioner för installationssökväg

sysconfig tillhandahåller vissa funktioner för att bestämma dessa installationssökvägar.

sysconfig.get_scheme_names()

Returnerar en tupel som innehåller alla scheman som för närvarande stöds i sysconfig.

sysconfig.get_default_scheme()

Returnerar standardschemanamnet för den aktuella plattformen.

Tillagd i version 3.10: Denna funktion hette tidigare _get_default_scheme() och betraktades som en implementeringsdetalj.

Ändrad i version 3.11: När Python körs från en virtuell miljö returneras schemat venv.

sysconfig.get_preferred_scheme(key)

Returnerar ett föredraget systemnamn för en installationslayout som anges av key.

key måste vara antingen "prefix", "home" eller "user".

Returvärdet är ett schemanamn som listas i get_scheme_names(). Det kan skickas till sysconfig-funktioner som tar ett scheme-argument, t.ex. get_paths().

Tillagd i version 3.10.

Ändrad i version 3.11: När Python körs från en virtuell miljö och key="prefix", returneras venv-schemat.

sysconfig._get_preferred_schemes()

Returnerar en dict som innehåller namn på föredragna system på den aktuella plattformen. Python-implementerare och redistributörer kan lägga till sina föredragna scheman till det globala värdet _INSTALL_SCHEMES på modulnivå och modifiera denna funktion för att returnera dessa schemanamn, för att t.ex. tillhandahålla olika scheman för system- och språkpakethanterare att använda, så att paket som installeras av endera inte blandas med dem av den andra.

Slutanvändare bör inte använda denna funktion, utan istället get_default_scheme() och get_preferred_scheme().

Tillagd i version 3.10.

sysconfig.get_path_names()

Returnerar en tupel som innehåller alla sökvägsnamn som för närvarande stöds i sysconfig.

sysconfig.get_path(name[, scheme[, vars[, expand]]])

Returnerar en installationssökväg som motsvarar sökvägen name, från installationsschemat med namnet scheme.

name måste vara ett värde från den lista som returneras av get_path_names().

sysconfig lagrar installationssökvägar som motsvarar varje sökvägsnamn, för varje plattform, med variabler som kan utökas. Till exempel är stdlib-sökvägen för nt-schemat: {base}/Lib.

get_path() kommer att använda de variabler som returneras av get_config_vars() för att expandera sökvägen. Alla variabler har standardvärden för varje plattform, så man kan anropa den här funktionen och få standardvärdet.

Om scheme anges måste det vara ett värde från listan som returneras av get_scheme_names(). Annars används standardschemat för den aktuella plattformen.

Om vars anges måste det vara en ordlista med variabler som uppdaterar den ordlista som returneras av get_config_vars().

Om expand är satt till False kommer sökvägen inte att expanderas med hjälp av variablerna.

Om namn inte hittas, utlöses ett KeyError.

sysconfig.get_paths([scheme[, vars[, expand]]])

Returnerar en ordbok som innehåller alla installationssökvägar som motsvarar ett installationsschema. Se get_path() för mer information.

Om scheme inte anges används standardschemat för den aktuella plattformen.

Om vars anges måste det vara en ordlista med variabler som uppdaterar den ordlista som används för att expandera sökvägarna.

Om expand är satt till false kommer sökvägarna inte att expanderas.

Om scheme inte är ett befintligt schema kommer get_paths() att ge upphov till ett KeyError.

Övriga funktioner

sysconfig.get_python_version()

Returnerar Pythons MAJOR.MINOR versionsnummer som en sträng. Liknar '%d.%d' % sys.version_info[:2].

sysconfig.get_platform()

Returnerar en sträng som identifierar den aktuella plattformen.

Detta används främst för att skilja mellan plattformsspecifika byggkataloger och plattformsspecifikt byggda distributioner. Innehåller vanligtvis operativsystemets namn och version samt arkitektur (enligt os.uname()), men exakt vilken information som ingår beror på operativsystemet; t.ex. är kärnversionen inte särskilt viktig för Linux.

Exempel på returnerade värden:

  • linux-i586

  • linux-alpha (?)

  • solaris-2.6-sun4u

Windows kommer att returnera en av:

  • win-amd64 (64-bitars Windows på AMD64, även känt som x86_64, Intel64 och EM64T)

  • win-arm64 (64-bitars Windows på ARM64, även kallat AArch64)

  • win32 (alla andra - specifikt returneras sys.platform)

macOS kan återvända:

  • macosx-10.6-ppc

  • macosx-10.4-ppc64

  • macosx-10.3-i386

  • macosx-10.4-fat

För andra icke-POSIX-plattformar returneras för närvarande bara sys.platform.

sysconfig.is_python_build()

Returnerar True om den Python-tolk som körs byggdes från källan och körs från dess byggda plats, och inte från en plats som härrör från t.ex. körning av make install eller installation via ett binärt installationsprogram.

sysconfig.parse_config_h(fp[, vars])

Analysera en fil i stil med config.h.

fp är ett filliknande objekt som pekar på den config.h-liknande filen.

En ordbok som innehåller namn/värde-par returneras. Om en valfri ordbok skickas in som andra argument används den i stället för en ny ordbok och uppdateras med de värden som läses in i filen.

sysconfig.get_config_h_filename()

Returnera sökvägen till pyconfig.h.

sysconfig.get_makefile_filename()

Returnerar sökvägen till Makefile.

Användning av kommandoraden

Du kan använda sysconfig som ett skript med Pythons -m-alternativ:

$ python -m sysconfig
Platform: "macosx-10.4-i386"
Python version: "3.2"
Current installation scheme: "posix_prefix"

Paths:
        data = "/usr/local"
        include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
        platinclude = "."
        platlib = "/usr/local/lib/python3.2/site-packages"
        platstdlib = "/usr/local/lib/python3.2"
        purelib = "/usr/local/lib/python3.2/site-packages"
        scripts = "/usr/local/bin"
        stdlib = "/usr/local/lib/python3.2"

Variables:
        AC_APPLE_UNIVERSAL_BUILD = "0"
        AIX_GENUINE_CPLUSPLUS = "0"
        AR = "ar"
        ARFLAGS = "rc"
        ...

Detta anrop kommer att skriva ut i standardutdata den information som returneras av get_platform(), get_python_version(), get_path() och get_config_vars().