모듈 임포트 하기
****************

PyObject *PyImport_ImportModule(const char *name)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   This is a wrapper around "PyImport_Import()" which takes a const
   char* as an argument instead of a PyObject*.

PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
    *반환값: 새 참조.*

   모듈을 임포트 합니다. 내장 파이썬 함수 "__import__()"를 통해 가장
   잘 설명할 수 있습니다.

   반환 값은 임포트 된 모듈이나 최상위 패키지에 대한 새로운 참조, 또는
   실패 시 예외가 설정된 "NULL"입니다. "__import__()"와 마찬가지로, 비
   어 있지 않은 *fromlist*가 제공되지 않는 한, 패키지의 서브 모듈이 요
   청되었을 때의 반환 값은 최상위 패키지입니다.

   임포트 실패는 "PyImport_ImportModule()"처럼 불완전한 모듈 객체를 제
   거합니다.

PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
    *반환값: 새 참조.** Part of the 안정 ABI 버전 3.7 이후로.*

   모듈을 임포트 합니다. 표준 "__import__()" 함수가 이 함수를 직접 호
   출하기 때문에, 내장 파이썬 함수 "__import__()"를 통해 가장 잘 설명
   할 수 있습니다.

   반환 값은 임포트 된 모듈이나 최상위 패키지에 대한 새로운 참조, 또는
   실패 시 예외가 설정된 "NULL"입니다. "__import__()"와 마찬가지로, 비
   어 있지 않은 *fromlist*가 제공되지 않는 한, 패키지의 서브 모듈이 요
   청되었을 때의 반환 값은 최상위 패키지입니다.

   Added in version 3.3.

PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   "PyImport_ImportModuleLevelObject()"와 비슷하지만, name은 유니코드
   객체 대신 UTF-8로 인코딩된 문자열입니다.

   버전 3.3에서 변경: *level*의 음수 값은 더는 허용되지 않습니다.

PyObject *PyImport_Import(PyObject *name)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   이것은 현재 "임포트 훅 함수"를 호출하는 고수준 인터페이스입니다 (명
   시적인 *level* 0을 사용하는데, 절대 임포트를 뜻합니다). 현재 전역의
   "__builtins__"에 있는 "__import__()" 함수를 호출합니다. 이는 현재
   환경에 설치된 임포트 훅을 사용하여 임포트가 수행됨을 의미합니다.

   이 함수는 항상 절대 임포트를 사용합니다.

PyObject *PyImport_ReloadModule(PyObject *m)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   모듈을 다시 로드(reload)합니다. 다시 로드된 모듈에 대한 참조를 반환
   하거나, 실패 시 예외가 설정된 "NULL"을 반환합니다 (이때 모듈은 여전
   히 존재합니다).

PyObject *PyImport_AddModuleRef(const char *name)
    *반환값: 새 참조.** Part of the 안정 ABI 버전 3.13 이후로.*

   모듈 이름에 해당하는 모듈 객체를 반환합니다.

   *name* 인자는 "package.module" 형식일 수 있습니다. 먼저 모듈 딕셔너
   리에 있는지 확인하고, 없으면 새로 만들어 모듈 딕셔너리에 삽입합니다
   .

   성공하면 모듈에 대한 *강한 참조*를 반환합니다. 실패 시 예외를 설정
   하고 "NULL"을 반환합니다.

   The module name *name* is decoded from UTF-8.

   이 함수는 모듈을 로드하거나 임포트 하지 않습니다; 모듈이 아직 로드
   되지 않았으면, 빈 모듈 객체를 얻게 됩니다. 모듈을 임포트 하려면
   "PyImport_ImportModule()"이나 그 변형 중 하나를 사용하십시오.
   *name*에서 점으로 구분된 이름으로 암시된 패키지 구조는 이미 존재하
   지 않는다면 만들어지지 않습니다.

   Added in version 3.13.

PyObject *PyImport_AddModuleObject(PyObject *name)
    *반환값: 빌린 참조.** Part of the 안정 ABI 버전 3.7 이후로.*

   "PyImport_AddModuleRef()"와 비슷하지만, *빌린 참조*를 반환하고
   *name*은 "str" 객체입니다.

   Added in version 3.3.

PyObject *PyImport_AddModule(const char *name)
    *반환값: 빌린 참조.** Part of the 안정 ABI.*

   Similar to "PyImport_AddModuleRef()", but return a *borrowed
   reference*.

PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   주어진 모듈 이름(name)("package.module" 형식일 수 있습니다)과 파이
   썬 바이트 코드 파일에서 읽거나 내장 함수 "compile()"로 얻은 코드 객
   체로, 모듈을 로드합니다. 모듈 객체에 대한 새로운 참조를 반환하거나,
   또는 에러가 발생하면 예외가 설정된 "NULL"을 반환합니다. 에러가 발생
   하면 "sys.modules"에서 *name*이 제거됩니다,
   "PyImport_ExecCodeModule()" 에 진입할 때 *name*이 "sys.modules"에
   이미 있어도 그렇습니다. "sys.modules"에 불완전하게 초기화된 모듈을
   남겨 두는 것은 위험합니다, 그러한 모듈을 임포트 할 때 모듈 객체가
   알 수 없는 (그리고 아마도 모듈 작성자의 의도에 비추어볼 때 손상된)
   상태에 있음을 알 방법이 없기 때문입니다.

   모듈의 "__spec__"과 "__loader__"는 아직 설정되지 않았다면 적절한 값
   으로 설정됩니다. 스펙의 로더는 모듈의 "__loader__"(설정되었다면)로
   설정되고, 그렇지 않으면 "SourceFileLoader" 의 인스턴스로 설정됩니다
   .

   The module's "__file__" attribute will be set to the code object's
   "co_filename".

   이 함수는 이미 임포트 되었다면 모듈을 다시 로드합니다. 모듈을 다시
   로드하는 의도된 방법은 "PyImport_ReloadModule()"을 참조하십시오.

   *name*이 "package.module" 형식의 점으로 구분된 이름을 가리키면, 이
   미 만들어지지 않은 패키지 구조는 여전히 만들어지지 않습니다.

   "PyImport_ExecCodeModuleEx()"와
   "PyImport_ExecCodeModuleWithPathnames()"도 참조하십시오.

   버전 3.12에서 변경: The setting of "__cached__" and "__loader__" is
   deprecated. See "ModuleSpec" for alternatives.

   버전 3.15에서 변경: "__cached__" is no longer set.

PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   "PyImport_ExecCodeModule()"과 유사하지만, 모듈 객체의 "__file__" 어
   트리뷰트는 "NULL"이 아니라면 *pathname*으로 설정됩니다.

   "PyImport_ExecCodeModuleWithPathnames()"도 참조하십시오.

PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
    *반환값: 새 참조.** Part of the 안정 ABI 버전 3.7 이후로.*

   Like "PyImport_ExecCodeModuleEx()", but the path to any compiled
   file via *cpathname* is used appropriately when non-"NULL".  Of the
   three functions, this is the preferred one to use.

   Added in version 3.3.

   버전 3.12에서 변경: Setting "__cached__" is deprecated. See
   "ModuleSpec" for alternatives.

   버전 3.15에서 변경: "__cached__" no longer set.

PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   "PyImport_ExecCodeModuleObject()"와 유사하지만, *name*, *pathname*
   및 *cpathname*은 UTF-8로 인코딩된 문자열입니다. *pathname*의 값이
   "NULL"로 설정된 경우 어떤 값이 *cpathname*에서 와야하는지 알아내려
   고 합니다.

   Added in version 3.2.

   버전 3.3에서 변경: 바이트 코드 경로만 제공되면 소스 경로를 계산할
   때 "imp.source_from_cache()"를 사용합니다.

   버전 3.12에서 변경: No longer uses the removed "imp" module.

long PyImport_GetMagicNumber()
    * Part of the 안정 ABI.*

   파이썬 바이트 코드 파일(일명 ".pyc" 파일)의 매직 번호(magic number)
   를 반환합니다. 매직 번호는 바이트 코드 파일의 처음 4바이트에 리틀
   엔디안 바이트 순서로 존재해야 합니다. 에러 시 "-1"을 반환합니다.

   버전 3.3에서 변경: 실패 시 "-1"을 반환합니다.

const char *PyImport_GetMagicTag()
    * Part of the 안정 ABI.*

   **PEP 3147** 형식 파이썬 바이트 코드 파일 이름의 매직 태그 문자열을
   반환합니다. "sys.implementation.cache_tag"의 값은 신뢰할 수 있고 이
   함수 대신 사용해야 함에 유의하십시오.

   Added in version 3.2.

PyObject *PyImport_GetModuleDict()
    *반환값: 빌린 참조.** Part of the 안정 ABI.*

   모듈 관리에 사용되는 딕셔너리(일명 "sys.modules")를 반환합니다. 이
   것은 인터프리터마다 존재하는 변수임에 유의하십시오.

PyObject *PyImport_GetModule(PyObject *name)
    *반환값: 새 참조.** Part of the 안정 ABI 버전 3.8 이후로.*

   주어진 이름으로 이미 임포트 된 모듈을 반환합니다. 모듈이 아직 임포
   트 되지 않았다면 "NULL"을 반환하지만 에러는 설정하지 않습니다. 조회
   에 실패하면 "NULL"을 반환하고 에러를 설정합니다.

   Added in version 3.7.

PyObject *PyImport_GetImporter(PyObject *path)
    *반환값: 새 참조.** Part of the 안정 ABI.*

   "sys.path"/"pkg.__path__" 항목 *path*를 위한 파인더 객체를 반환합니
   다, "sys.path_importer_cache" 딕셔너리에서 꺼낼 수도 있습니다. 아직
   캐시 되지 않았으면, 경로 항목을 처리할 수 있는 훅이 발견될 때까지
   "sys.path_hooks"를 탐색합니다. 훅이 없으면 "None"을 반환합니다; 이
   것은 호출자에게 *경로 기반 파인더*가 이 경로 항목에 대한 파인더를
   찾을 수 없음을 알려줍니다. "sys.path_importer_cache"에 결과를 캐시
   합니다. 파인더 객체에 대한 새로운 참조를 반환합니다.

int PyImport_ImportFrozenModuleObject(PyObject *name)
    * Part of the 안정 ABI 버전 3.7 이후로.*

   *name*이라는 이름의 프로즌 모듈(frozen module)을 로드합니다. 성공하
   면 "1"을, 모듈을 찾지 못하면 "0"을, 초기화에 실패하면 예외를 설정하
   고 "-1"을 반환합니다. 로드가 성공할 때 임포트 된 모듈에 액세스하려
   면 "PyImport_ImportModule()"을 사용하십시오. (잘못된 이름에 주의하
   십시오 --- 이 함수는 모듈이 이미 임포트 되었을 때 다시 로드합니다.)

   Added in version 3.3.

   버전 3.4에서 변경: "__file__" 어트리뷰트는 더는 모듈에 설정되지 않
   습니다.

int PyImport_ImportFrozenModule(const char *name)
    * Part of the 안정 ABI.*

   "PyImport_ImportFrozenModuleObject()"와 비슷하지만, name은 유니코드
   객체 대신 UTF-8로 인코딩된 문자열입니다.

struct _frozen

   이것은 **freeze** 유틸리티(파이썬 소스 배포의 "Tools/freeze/"를 참
   조하십시오)가 생성한 프로즌 모듈 디스크립터를 위한 구조체 형 정의입
   니다. "Include/import.h"에 있는 정의는 다음과 같습니다:

      struct _frozen {
          const char *name;
          const unsigned char *code;
          int size;
          bool is_package;
      };

   버전 3.11에서 변경: The new "is_package" field indicates whether
   the module is a package or not. This replaces setting the "size"
   field to a negative value.

const struct _frozen *PyImport_FrozenModules

   이 포인터는 "_frozen" 레코드의 배열을 가리키도록 초기화되는데, 멤버
   가 모두 "NULL"이나 0인 레코드로 끝납니다. 프로즌 모듈이 임포트 될
   때, 이 테이블에서 검색됩니다. 제삼자 코드는 이것을 사용하여 동적으
   로 생성된 프로즌 모듈 컬렉션을 제공할 수 있습니다.

int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))
    * Part of the 안정 ABI.*

   기존의 내장 모듈 테이블에 단일 모듈을 추가합니다. 이것은
   "PyImport_ExtendInittab()"을 감싸는 편리한 래퍼인데, 테이블을 확장
   할 수 없으면 "-1"을 반환합니다. 새 모듈은 *name*이라는 이름으로 임
   포트 될 수 있으며, *initfunc* 함수를 처음 시도한 임포트에서 호출되
   는 초기화 함수로 사용합니다. "Py_Initialize()" 전에 호출해야 합니다
   .

struct _inittab

   내장 모듈 목록에 있는 단일 항목을 기술하는 구조체. 파이썬을 내장하
   는 프로그램은 "PyImport_ExtendInittab()"과 함께 이러한 구조체의 배
   열을 사용하여 추가 내장 모듈을 제공 할 수 있습니다. 구조체는 두 개
   의 멤버로 구성됩니다:

   const char *name

      모듈 이름, ASCII로 인코딩된 문자열.

   PyObject *(*initfunc)(void)

      인터프리터에 내장된 모듈을 위한 초기화 함수.

int PyImport_ExtendInittab(struct _inittab *newtab)

   내장 모듈 테이블에 모듈 컬렉션을 추가합니다. *newtab* 배열은 "name"
   필드에 "NULL"을 포함하는 센티넬(sentinel) 항목으로 끝나야 합니다;
   센티넬 값을 제공하지 않으면 메모리 오류가 발생할 수 있습니다. 성공
   하면 "0"을, 내부 테이블을 확장하기 위한 메모리가 충분하지 않으면
   "-1"을 반환합니다. 실패하면, 내부 테이블에 모듈이 추가되지 않습니다
   . "Py_Initialize()" 전에 호출해야 합니다.

   If Python is initialized multiple times, "PyImport_AppendInittab()"
   or "PyImport_ExtendInittab()" must be called before each Python
   initialization.

struct _inittab *PyImport_Inittab

   The table of built-in modules used by Python initialization. Do not
   use this directly; use "PyImport_AppendInittab()" and
   "PyImport_ExtendInittab()" instead.

PyObject *PyImport_ImportModuleAttr(PyObject *mod_name, PyObject *attr_name)
    *반환값: 새 참조.*

   Import the module *mod_name* and get its attribute *attr_name*.

   Names must be Python "str" objects.

   Helper function combining "PyImport_Import()" and
   "PyObject_GetAttr()". For example, it can raise "ImportError" if
   the module is not found, and "AttributeError" if the attribute
   doesn't exist.

   Added in version 3.14.

PyObject *PyImport_ImportModuleAttrString(const char *mod_name, const char *attr_name)
    *반환값: 새 참조.*

   Similar to "PyImport_ImportModuleAttr()", but names are UTF-8
   encoded strings instead of Python "str" objects.

   Added in version 3.14.

PyImport_LazyImportsMode PyImport_GetLazyImportsMode()

   Gets the current lazy imports mode.

   Added in version 3.15.

PyObject *PyImport_GetLazyImportsFilter()

   Return a *strong reference* to the current lazy imports filter, or
   "NULL" if none exists. This function always succeeds.

   Added in version 3.15.

int PyImport_SetLazyImportsMode(PyImport_LazyImportsMode mode)

   Similar to "PyImport_ImportModuleAttr()", but names are UTF-8
   encoded strings instead of Python "str" objects.

   This function always returns "0".

   Added in version 3.15.

int PyImport_SetLazyImportsFilter(PyObject *filter)

   Sets the current lazy imports filter. The *filter* should be a
   callable that will receive "(importing_module_name,
   imported_module_name, [fromlist])" when an import can potentially
   be lazy. The "imported_module_name" value is the resolved module
   name, so "lazy from .spam import eggs" passes "package.spam". The
   callable must return "True" if the import should be lazy and
   "False" otherwise.

   Return "0" on success and "-1" with an exception set otherwise.

   Added in version 3.15.

type PyImport_LazyImportsMode

   Enumeration of possible lazy import modes.

   enumerator PyImport_LAZY_NORMAL

      Respect the "lazy" keyword in source code. This is the default
      mode.

   enumerator PyImport_LAZY_ALL

      Make all imports lazy by default.

   enumerator PyImport_LAZY_NONE

      Disable lazy imports entirely. Even explicit "lazy" statements
      become eager imports.

   Added in version 3.15.

PyObject *PyImport_CreateModuleFromInitfunc(PyObject *spec, PyObject *(*initfunc)(void))

   This function is a building block that enables embedders to
   implement the "create_module()" step of custom static extension
   importers (e.g. of statically-linked extensions).

   *spec* must be a "ModuleSpec" object.

   *initfunc* must be an initialization function, the same as for
   "PyImport_AppendInittab()".

   On success, create and return a module object. This module will not
   be initialized; call "PyModule_Exec()" to initialize it. (Custom
   importers should do this in their "exec_module()" method.)

   On error, return NULL with an exception set.

   Added in version 3.15.
