Python

sysconfig — 파이썬의 구성 정보에 접근하기

Added in version 3.2.

소스 코드: Lib/sysconfig


sysconfig 모듈은 설치 경로 목록과 현재 플랫폼과 관련된 구성 변수 같은 파이썬의 구성 정보에 대한 액세스를 제공합니다.

구성 변수

Python 배포판에는 Makefilepyconfig.h 헤더 파일이 들어 있습니다. 이 파일은 파이썬 바이너리 자체와 setuptools 를 사용하여 컴파일된 타사 C 확장을 빌드하는 데 필요합니다.

sysconfigget_config_vars() 또는 get_config_var()\를 사용하여 접근할 수 있는 딕셔너리에 이들 파일에 있는 모든 변수를 넣습니다.

윈도우에서는 훨씬 작은 세트입니다.

sysconfig.get_config_vars(*args)

인자가 없으면, 현재 플랫폼과 관련된 모든 구성 변수의 딕셔너리를 반환합니다.

인자가 있으면, 인자를 사용하여 구성 변수 딕셔너리에서 각 인자를 조회한 결괏값 리스트를 돌려줍니다.

인자별로, 값이 없으면 None 을 반환합니다.

sysconfig.get_config_var(name)

하나의 변수 name 의 값을 반환합니다. get_config_vars().get(name) 과 같습니다.

name 을 찾지 못하면 None 을 반환합니다.

사용 예:

>>> 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++']

설치 경로

파이썬은 플랫폼 및 설치 옵션에 따라 다른 설치 스킴을 사용합니다. 이 스킴은 os.name 에 의해 반환된 값을 기반으로 하는 고유한 식별자로 sysconfig 에 저장됩니다. 이 스킴은 패키지 설치기가 파일을 복사할 위치를 결정하는 데 사용됩니다.

파이썬은 현재 9가지 스킴을 지원합니다:

  • posix_prefix: 리눅스나 맥 OS 같은 포직스(POSIX) 플랫폼용 스킴. 이것은 파이썬이나 컴포넌트가 설치될 때 사용되는 기본 스킴입니다.

  • posix_home: home 옵션이 사용될 때, 포직스 플랫폼용 스킴. 이 스킴은 특정 홈 접두어 아래에 있는 경로를 정의합니다.

  • posix_user: user 옵션이 사용될 때, 포직스 플랫폼용 스킴. 이 스킴은 사용자 홈 디렉터리 아래에 있는 경로를 정의합니다 (site.USER_BASE).

  • posix_venv: POSIX 플랫폼용 Python virtual environments 스킴; 기본값은 posix_prefix 와 동일합니다.

  • nt: 윈도우용 스킴. 이것은 파이썬이나 컴포넌트가 설치될 때 사용되는 기본 스킴입니다.

  • nt_user: user 옵션이 사용될 때, 윈도우용 스킴.

  • nt_venv: Windows용 Python virtual environments 스킴; 기본값은 nt_ 와 동일합니다.

  • venv: 파이썬이 실행되는 플랫폼에 따라 posix_venv 또는 nt_venv 의 값으로 구성되는 스킴입니다.

  • osx_framework_user: user 옵션이 사용될, 맥 OS용 스킴.

각 스킴은 일련의 경로로 구성되며 각 경로는 고유한 식별자를 가집니다. 파이썬은 현재 8개의 경로를 사용합니다:

  • stdlib: 플랫폼마다 다르지 않은 표준 파이썬 라이브러리 파일이 들어있는 디렉터리.

  • platstdlib: 플랫폼마다 다른 표준 파이썬 라이브러리 파일이 들어있는 디렉터리.

  • platlib: 사이트마다, 플랫폼마다 다른 파일용 디렉터리.

  • purelib: 사이트마다 다르지만, 플랫폼마다 다르지 않은 파일이 들어있는 디렉터리 (‘순수한’ 파이썬’).

  • include: 파이썬 C-API 를 위한 플랫폼마다 다르지 않은 헤더 파일용 디렉터리.

  • platinclude: 파이썬 C-API 를 위한 플랫폼마다 다른 헤더 파일용 디렉터리.

  • scripts: 스크립트 파일용 디렉터리.

  • data: 데이터 파일용 디렉터리.

사용자 스킴

이 스킴은 전역 site-packages 디렉터리에 쓰기 권한이 없거나 여기에 설치하고 싶지 않은 사용자에게 가장 편리한 솔루션이 되도록 설계되었습니다.

파일은 :const:`site.USER_BASE`의 하위 디렉터리에 설치됩니다 (이하 :file:`{userbase}`로 작성됨). 이 스킴은 순수 Python 모듈과 확장 모듈을 같은 위치(또한 :const:`site.USER_SITE`로 알려짐)에 설치합니다.

posix_user

경로

설치 디렉터리

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

경로

설치 디렉터리

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

경로

설치 디렉터리

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

홈 스킴

“홈 스킴”의 기본 아이디어는 사용자가 개인적인 파이썬 모듈 스태시(stash)를 구축하고 유지하는 것입니다. 이 스킴의 이름은 Unix의 “홈” 디렉터리 개념에서 파생되었는데, Unix 사용자가 자신의 홈 디렉터리를 /usr/ 또는 :file:`/usr/local/`과 유사하게 만드는 것이 드물지 않기 때문입니다. 이 스킴은 설치하는 운영 체제에 관계없이 누구에게나 사용될 수 있습니다.

posix_home

경로

설치 디렉터리

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

접두사 스킴

“접두사 스킴”은 하나의 파이썬 설치를 사용하여 빌드/설치를 수행하고 싶을 때(즉, 설정 스크립트를 실행), 모듈을 다른 파이썬 설치의 타사 모듈 디렉터리(또는 다른 파이썬 설치처럼 보이는 무언가)에 설치하고 싶을 때 유용합니다. 이것이 약간 특이하게 들릴 수 있지만, 그렇기 때문에 사용자 및 홈 스킴이 먼저 오게 됩니다. 하지만 접두사 스킴이 유용할 것으로 알려진 경우가 최소 두 가지 있습니다.

먼저, 많은 리눅스 배포판이 파이썬을 보다 전통적인 /usr/local 대신 /usr`에 놓는다는 점을 고려하십시오. 경우는 파이썬이 로컬 추가 기능이라기보다는 "시스템"의 일부이므로 전적으로 적절합니다. 그러나 소스에서 파이썬 모듈을 설치하는 경우, :file:/usr/lib/python2.{X}`보다는 :file:`/usr/local/lib/python2.{X}`에 넣는 것을 선호할 것입니다.

또 다른 가능성은 이름이 원격 디렉터리로 쓰기 위해 사용되는 이름과 읽기 위해 사용되는 이름이 다른 네트워크 파일 시스템입니다. 예를 들어, Python 인터프리터가 :file:/usr/local/bin/python`으로 접근될 때, 모듈을 :file:/usr/local/lib/python2.{X}`에서 검색할 수 있지만, 해당 모듈은 예를 들어 :file:/mnt/{@server}/export/lib/python2.{X}`에 설치되어야 합니다.

posix_prefix

경로

설치 디렉터리

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

경로

설치 디렉터리

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

설치 경로 함수

:mod:`!sysconfig`는 이러한 설치 경로를 결정하는 몇 가지 함수를 제공합니다.

sysconfig.get_scheme_names()

현재 sysconfig 에서 지원되는 모든 스킴을 포함하는 튜플을 반환합니다.

sysconfig.get_default_scheme()

현재 플랫폼에 대한 기본 스킴 이름을 반환합니다.

Added in version 3.10: 이 함수는 이전에 _get_default_scheme() 이라는 이름이었으며 구현 세부 사항으로 간주되었습니다.

버전 3.11에서 변경: Python이 가상 환경에서 실행되는 경우, venv 스킴이 반환됩니다.

sysconfig.get_preferred_scheme(key)

key 로 지정된 설치 레이아웃에 대한 선호 스킴 이름을 반환합니다.

key"prefix", "home" 또는 "user" 중 하나여야 합니다.

반환 값은 get_scheme_names`에 나열된 스킴 이름입니다. 이는 :func:`get_paths`와 같이 *scheme* 인수를 받는 :mod:()!sysconfig` 함수에 전달될 수 있습니다.

Added in version 3.10.

버전 3.11에서 변경: Python이 가상 환경에서 실행되고 key="prefix" 인 경우, venv 스킴이 반환됩니다.

sysconfig._get_preferred_schemes()

현재 플랫폼의 선호 스킴 이름을 포함하는 딕셔너리를 반환합니다. Python 구현자와 재배포자는 자신들이 선호하는 스킴을 _INSTALL_SCHEMES 모듈 수준 전역 값에 추가할 수 있으며, 이 함수를 수정하여 해당 스킴 이름들을 반환할 수 있습니다. 예를 들어, 시스템 패키지 관리자와 언어 패키지 관리자가 사용할 다른 스킴을 제공하여, 어느 쪽이 설치했는지에 관계없이 패키지들이 섞이는 것을 방지할 수 있습니다.

최종 사용자는 이 함수를 사용해서는 안 되며, 대신 :func:`get_default_scheme`와 :func:`get_preferred_scheme`을 사용해야 합니다.

Added in version 3.10.

sysconfig.get_path_names()

현재 sysconfig 에서 지원되는 모든 경로명을 포함하는 튜플을 반환합니다.

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

scheme 이라는 설치 스킴에서, 경로 name 에 해당하는 설치 경로를 돌려줍니다.

nameget_path_names() 가 돌려주는 리스트에 있는 값이어야 합니다.

sysconfig`는 경로명에 해당하는 설치 경로를 플랫폼별로 확장할 변수와 함께 저장합니다. 예를 들어, *nt* 스킴의 *stdlib* 경로는 ``{base}/Lib` 입니다.

get_path()get_config_vars() 에 의해 반환된 변수를 사용하여 경로를 확장합니다. 모든 변수는 각 플랫폼에 대한 기본값을 가지므로 이 함수를 호출하고 기본값을 가져올 수 있습니다.

scheme 이 제공되면, 그것은 get_scheme_names() 에 의해 반환된 리스트에 있는 값이어야 합니다. 그렇지 않으면, 현재 플랫폼의 기본 스킴이 사용됩니다.

vars 가 제공되면, get_config_vars() 에 의해 반환된 딕셔너리를 갱신할 변수의 딕셔너리여야 합니다.

expandFalse 로 설정되면, 경로는 변수를 사용하여 확장되지 않습니다.

name 을 찾지 못하면, KeyError를 발생시킵니다.

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

설치 스킴에 해당하는 모든 설치 경로를 포함하는 딕셔너리를 돌려줍니다. 자세한 정보는 get_path() 를 보십시오.

scheme 을 제공하지 않으면, 현재 플랫폼에 대한 기본 스킴을 사용합니다.

vars 가 제공되면, 경로를 확장하는 데 사용되는 딕셔너리를 갱신하는 변수의 딕셔너리여야 합니다.

expand 를 거짓으로 설정하면 경로가 확장되지 않습니다.

scheme 이 존재하는 스킴이 아니면, get_paths()KeyError 를 발생시킵니다.

기타 함수

sysconfig.get_python_version()

MAJOR.MINOR 파이썬 버전 번호를 문자열로 반환합니다. '%d.%d' % sys.version_info[:2] 와 유사합니다.

sysconfig.get_platform()

현재의 플랫폼을 식별하는 문자열을 돌려줍니다.

이는 주로 플랫폼별 빌드 디렉터리와 플랫폼별로 빌드 된 배포판을 구별하기 위해 사용됩니다. 포함된 정확한 정보는 OS에 따라 다르지만, 일반적으로 OS 이름과 버전 및 아키텍처를 포함합니다 (os.uname() 에서 제공됩니다); 예를 들어, 리눅스에서 커널 버전은 특별히 중요하지 않습니다.

반환 값의 예:

  • linux-x86_64

  • linux-aarch64

  • solaris-2.6-sun4u

Windows:

  • win-amd64 (AMD64의 64비트 윈도우, 일명 x86_64, Intel64, EM64T 등)

  • win-arm64 (ARM64의 64비트 윈도우, 일명 AArch64)

  • win32 (기타 모든 것 - 구체적으로, sys.platform이 반환됩니다)

POSIX 기반 OS:

  • linux-x86_64

  • macosx-15.5-arm64

  • macosx-26.0-universal2 (Apple Silicon 또는 Intel의 macOS)

  • android-24-arm64_v8a

다른 포직스 이외의 플랫폼의 경우, 현재는 sys.platform 만 반환합니다.

sysconfig.is_python_build()

실행 중인 파이썬 인터프리터가 소스에서 빌드되어 빌드 된 위치에서 실행되고, make install 을 실행하거나 바이너리 설치 프로그램을 통해 설치 한 결과가 아닌 위치에서 실행되는 것이 아니라면 True 를 반환합니다.

sysconfig.parse_config_h(fp[, vars])

config.h-스타일 파일을 해석합니다.

fpconfig.h-류 파일을 가리키는 파일류 객체입니다.

이름/값 쌍을 포함하는 딕셔너리가 반환됩니다. 선택적 딕셔너리가 두 번째 인자로 전달되면, 새 사전 대신 사용되며 파일에서 읽은 값으로 갱신됩니다.

sysconfig.get_config_h_filename()

pyconfig.h 의 경로를 반환합니다.

sysconfig.get_makefile_filename()

Makefile 의 경로를 반환합니다.

명령 줄 사용법

Python의 -m 옵션을 사용하여 :mod:`!sysconfig`를 스크립트로 사용할 수 있습니다:

$ 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"
        ...

이 호출은 get_platform(), get_python_version(), get_path()get_config_vars() 에 의해 반환된 정보를 표준 출력에 인쇄합니다.

분실물 보관소