Python Language
모듈 가져 오기
수색…
통사론
- import module_name
- import module_name.submodule_name
- from module_name import *
- module_name에서 가져 오기 submodule_name [, class_name , function_name , ... 등]
- NEW_NAME 같은 모듈 이름 수입 some_name에서
- from module_name.submodule_name import class_name [, 함수 이름 , ... 등]
비고
모듈을 임포트하면 파이썬이이 모듈의 모든 최상위 코드를 평가하게하여 모듈에 포함 된 모든 함수, 클래스 및 변수를 학습 합니다. 모듈을 가져올 때 최상위 코드를주의 깊게 if __name__ == '__main__':
캡슐화하십시오. 모듈을 가져올 때 모듈을 실행하지 않으려면 캡슐화하십시오.
모듈 가져 오기
import
문 사용 :
>>> import random
>>> print(random.randint(1, 10))
4
import module
은 import module
을 가져온 다음 module.name
구문을 사용하여 객체 (예 : 값, 함수 및 클래스)를 참조 할 수있게합니다. 위의 예에서는 randint
함수가 포함 된 random
모듈을 가져옵니다. 그래서 random
을 import함으로써 random.randint
randint
를 호출 할 수 있습니다.
모듈을 가져 와서 다른 이름으로 지정할 수 있습니다.
>>> import random as rn
>>> print(rn.randint(1, 10))
4
파이썬 파일 main.py
가 custom.py
와 같은 폴더에 custom.py
. 다음과 같이 가져올 수 있습니다.
import custom
모듈에서 함수를 임포트하는 것도 가능합니다 :
>>> from math import sin
>>> sin(1)
0.8414709848078965
특정 함수를 더 자세히 모듈로 가져 오려면 점 연산자를 import
키워드의 왼쪽 에서만 사용할 수 있습니다.
from urllib.request import urlopen
파이썬에서는 최상위 수준에서 함수를 호출하는 두 가지 방법이 있습니다. 하나는 import
이고 다른 하나는 import
from
. 우리는 이름 충돌의 가능성이있을 때 import
사용해야합니다. hello.py
파일과 world.py
파일에 function이라는 function
가 있다고 가정 해 보겠습니다. 그러면 import
문이 잘 작동합니다.
from hello import function
from world import function
function() #world's function will be invoked. Not hello's
일반적으로 import
는 네임 스페이스를 제공합니다.
import hello
import world
hello.function() # exclusively hello's function will be invoked
world.function() # exclusively world's function will be invoked
그러나 당신이 충분히 확신하는 경우, 전체 프로젝트 from
성명 from
사용해야하는 동일한 함수 이름을 사용하는 방법은 없습니다.
같은 줄에 여러 개의 가져 오기를 만들 수 있습니다.
>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e
>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417
위에 표시된 키워드와 구문을 조합하여 사용할 수도 있습니다.
>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys
>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png
모듈에서 특정 이름 가져 오기
전체 모듈을 가져 오는 대신 지정된 이름 만 가져올 수 있습니다.
from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10)) # Out: 5
from random
필요한, 파이썬 인터프리터가 있기 때문에 어떤 자원에서 함수 또는 클래스와 가져와야합니다 알고 import randint
함수 또는 클래스 자체를 지정합니다.
아래의 다른 예 (위와 비슷 함) :
from math import pi
print(pi) # Out: 3.14159265359
다음 예제에서는 모듈을 가져 오지 않았기 때문에 오류가 발생합니다.
random.randrange(1, 10) # works only if "import random" has been run before
출력 :
NameError: name 'random' is not defined
파이썬 인터프리터는 random
무엇을 의미하는지 이해하지 못합니다. 예제에 import random
을 추가하여 선언해야합니다.
import random
random.randrange(1, 10)
모듈에서 모든 이름 가져 오기
from module_name import *
예 :
from math import *
sqrt(2) # instead of math.sqrt(2)
ceil(2.7) # instead of math.ceil(2.7)
이것은 math
모듈에 정의 된 모든 이름을 밑줄로 시작하는 이름이 아닌 전역 네임 스페이스로 가져옵니다 (작성자는 내부 용으로 만 사용함을 나타냅니다).
경고 : 같은 이름의 함수가 이미 정의되거나 가져온 경우 덮어 씁니다 . 거의 항상 from math import sqrt, ceil
특정 이름 만 가져 오는 것이 좋습니다 .
def sqrt(num):
print("I don't know what's the square root of {}.".format(num))
sqrt(4)
# Output: I don't know what's the square root of 4.
from math import *
sqrt(4)
# Output: 2.0
별표 표시된 가져 오기는 모듈 수준에서만 허용됩니다. 클래스 또는 함수 정의에서이를 수행하려고하면 SyntaxError
합니다.
def f():
from math import *
과
class A:
from math import *
둘 다 실패합니다.
SyntaxError: import * only allowed at module level
__all__ 특수 변수
모듈에는 __all__
이라는 특수 변수가 __all__
from mymodule import *
사용할 때 가져올 변수를 제한 할 수 있습니다.
주어진 다음 모듈 :
# mymodule.py
__all__ = ['imported_by_star']
imported_by_star = 42
not_imported_by_star = 21
from mymodule import *
사용할 때만 imported_by_star
from mymodule import *
.
>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined
그러나 not_imported_by_star
는 명시 적으로 가져올 수 있습니다.
>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21
프로그래밍 방식 가져 오기
함수 호출을 통해 모듈을 가져 오려면 importlib
모듈 (Python 버전 2.7부터 포함)을 사용하십시오.
import importlib
random = importlib.import_module("random")
importlib.import_module()
함수는 패키지의 하위 모듈을 직접 가져옵니다.
collections_abc = importlib.import_module("collections.abc")
이전 버전의 Python의 경우 imp
모듈을 사용하십시오.
imp.find_module
및 imp.load_module
함수를 사용하여 프로그래밍 방식으로 가져 오기를 수행합니다.
표준 라이브러리 문서 에서 가져온 것
import imp, sys
def import_module(name):
fp, pathname, description = imp.find_module(name)
try:
return imp.load_module(name, fp, pathname, description)
finally:
if fp:
fp.close()
프로그래밍 방식으로 모듈을 가져 오려면 __import__()
를 사용하지 마십시오 ! sys.modules
, fromlist
인수 등과 같이 importlib.import_module()
이 간과하기 쉬운 미묘한 세부 사항이 있습니다.
임의의 파일 시스템 위치에서 모듈 가져 오기
이미 파이썬 표준 라이브러리 나 사이드 패키지로 내장 모듈로 존재하지 않는 모듈을 가져 오려면, 모듈이 발견 된 디렉토리에 sys.path
라는 경로를 추가하면 sys.path
. 이 기능은 호스트에 여러 파이썬 환경이있는 경우 유용 할 수 있습니다.
import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule
모듈 자체에 대한 경로가 아닌 mymodule
이있는 디렉토리 에 경로를 추가하는 것이 중요합니다.
수입품에 대한 PEP8 규정
수입품을위한 PEP8 스타일 가이드 라인을 추천합니다 :
수입은 별도의 줄에 있어야합니다.
from math import sqrt, ceil # Not recommended from math import sqrt # Recommended from math import ceil
모듈 상단에서 다음과 같이 가져 오기를 주문합니다.
- 표준 라이브러리 가져 오기
- 관련 타사 수입
- 로컬 응용 프로그램 / 라이브러리 별 가져 오기
와일드 카드 가져 오기는 현재 네임 스페이스의 이름에 혼란을 야기하므로 피해야합니다.
from module import *
를 수행하면 코드의 특정 이름이module
에서 왔는지 여부가 불분명 할 수 있습니다.from module import *
-type 문을 여러 개 사용하면 이중화가 가능합니다.상대적인 수입품 사용을 피하십시오; 대신 명시 적 가져 오기를 사용하십시오.
하위 모듈 가져 오기
from module.submodule import function
module.submodule
에서 function
를 가져옵니다.
__import __ () 함수
__import__()
함수는 런타임에 이름 만 알려진 모듈을 가져 오는 데 사용할 수 있습니다
if user_input == "os":
os = __import__("os")
# equivalent to import os
이 함수를 사용하여 모듈에 대한 파일 경로를 지정할 수도 있습니다
mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")
모듈 다시 가져 오기
대화식 인터프리터를 사용할 때 모듈을 다시로드해야 할 수 있습니다. 이는 모듈을 편집하고 최신 버전을 가져 오려는 경우 또는 기존 모듈의 요소를 원숭이 패치하여 변경 사항을 되돌리려는 경우에 유용 할 수 있습니다.
되돌리려면 모듈을 다시 import
수는 없습니다 .
import math
math.pi = 3
print(math.pi) # 3
import math
print(math.pi) # 3
이는 인터프리터가 가져 오는 모든 모듈을 등록하기 때문입니다. 그리고 모듈을 다시 가져 오려고 할 때, 통역사는 그것을 레지스터에보고 아무 것도하지 않습니다. 다시 import
가 어려운 이유는 레지스터에서 해당 항목을 제거한 후에 import
를 사용하는 것입니다.
print(math.pi) # 3
import sys
if 'math' in sys.modules: # Is the ``math`` module in the register?
del sys.modules['math'] # If so, remove it.
import math
print(math.pi) # 3.141592653589793
그러나 더 간단하고 간단한 방법이 있습니다.
파이썬 2
reload
함수를 사용하십시오.
import math
math.pi = 3
print(math.pi) # 3
reload(math)
print(math.pi) # 3.141592653589793
파이썬 3
reload
함수가 importlib
로 이동되었습니다.
import math
math.pi = 3
print(math.pi) # 3
from importlib import reload
reload(math)
print(math.pi) # 3.141592653589793