"sysconfig" --- 파이썬의 구성 정보에 접근하기
*********************************************

버전 3.2에 추가.

**소스 코드:** Lib/sysconfig.py

======================================================================

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


구성 변수
=========

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

"sysconfig" 는 "get_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" 에 저장됩니다.

"distutils" 또는 Distutils 기반 시스템을 사용하여 설치되는 모든 새로운
구성 요소는 파일을 올바른 장소에 복사하기 위해 같은 스킴을 따릅니다.

Python currently supports six schemes:

* *posix_prefix*: scheme for POSIX platforms like Linux or macOS.
  This is the default scheme used when Python or a component is
  installed.

* *posix_home*: 설치 시 *home* 옵션을 사용할 때 사용되는 포직스 플랫폼
  을 위한 스킴. 이 스킴은 특정 홈 접두어를 써서 Distutils를 통해 구성
  요소가 설치될 때 사용됩니다.

* *posix_user*: 컴포넌트가 Distutils를 통해 설치되고 *user* 옵션이 사
  용될 때 사용되는 포직스 플랫폼을 위한 스킴. 이 스킴은 사용자 홈 디렉
  터리 아래에 있는 경로를 정의합니다.

* *nt*: 윈도우와 같은 NT 플랫폼을 위한 스킴.

* *nt_user*: *user* 옵션이 사용될 때 NT 플랫폼용 스킴.

* *osx_framework_user*: scheme for macOS, when the *user* option is
  used.

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

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

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

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

* *purelib*: 사이트마다 다르지만, 플랫폼마다 다르지 않은 파일이 들어있
  는 디렉터리.

* *include*: 플랫폼마다 다르지 않은 헤더 파일용 디렉터리.

* *platinclude*: 플랫폼마다 다른 헤더 파일용 디렉터리.

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

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

"sysconfig" 는 이러한 경로를 결정하는 몇 가지 함수를 제공합니다.

sysconfig.get_scheme_names()

   현재 "sysconfig" 에서 지원되는 모든 스킴을 포함하는 튜플을 돌려줍니
   다.

sysconfig.get_path_names()

   현재 "sysconfig" 에서 지원되는 모든 경로명을 포함하는 튜플을 돌려줍
   니다.

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

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

   *name* 은 "get_path_names()" 가 돌려주는 리스트에 있는 값이어야 합
   니다.

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

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

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

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

   *expand* 가 "False" 로 설정되면, 경로는 변수를 사용하여 확장되지 않
   습니다.

   If *name* is not found, raise a "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-i586

   * linux-alpha (?)

   * solaris-2.6-sun4u

   윈도우는 다음 중 하나를 반환합니다:

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

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

   macOS can return:

   * macosx-10.6-ppc

   * macosx-10.4-ppc64

   * macosx-10.3-i386

   * macosx-10.4-fat

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

sysconfig.is_python_build()

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

sysconfig.parse_config_h(fp[, vars])

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

   *fp* 는 "config.h"-류 파일을 가리키는 파일류 객체입니다.

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

sysconfig.get_config_h_filename()

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

sysconfig.get_makefile_filename()

   "Makefile" 의 경로를 반환합니다.


"sysconfig" 를 스크립트로 사용하기
==================================

"sysconfig" 를 파이썬의 *-m* 옵션으로 스크립트로 사용할 수 있습니다:

   $ 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()" 에 의해 반환된 정보를 표준 출력에 인쇄합니다.
