2.13 파이썬 패키지 사용하기¶
패키지 임포트¶
패키지가 설치되어 있다고 바로 파이썬에서 사용할 수 있는 것은 아니다. 패키지를 사용하려면 해당 패키지를 파이썬에서 사용할 수 있도록 설정하는 명령을 실행해야 한다. 파이썬에서 패키지를 사용하도록 설정하는 것을 패키지 임포트(import)라고 한다. 패키지를 임포트하려면 다음 명령을 실행한다.
import 패키지이름
이 때 주의할 점은 임포트할 때 사용하는 패키지 이름은 일반적으로 부르는 패키지 이름과 다를 수 있다. 예를 들어 Scikit-Learn 패키지는 sklearn
이라는 이름으로 임포트해야 한다.
패키지 이름은 추후 패키지 안의 함수들을 사용할 때 계속 쓰인다. 그래서 패키지 이름이 너무 길면 import ~ as ~
명령을 사용하여 짧은 패키지 별명을 사용할 수도 있다.
import 패키지이름 as 패키지별명
예를 들어 Scikit-Learn 은 보통 sk
라는 별명으로 임포트한다.
import sklearn as sk
패키지 내용 살펴보기¶
임포트된 패키지 안의 내용을 살펴보려면 다음 명령을 사용한다.
dir(패키지이름 또는 패키지별명)
예를 들어 Scikit-Learn 패키지를 sk
라는 별명으로 임포트하였으면 다음처럼 패키지 안에 포함된 함수 등을 출력할 수 있다.
dir(sk)
['_ASSUME_FINITE',
'__SKLEARN_SETUP__',
'__all__',
'__builtins__',
'__cached__',
'__check_build',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'__version__',
'_contextmanager',
'base',
'clone',
'config_context',
'exceptions',
'externals',
'get_config',
'logger',
'logging',
'os',
're',
'set_config',
'setup_module',
'sys',
'utils',
'warnings']
대부분의 패키지는 그 안에 하위 패키지를 가지고 있다. 이러한 하위 패키지 중에는 상위 패키지를 임포트할 때 자동으로 임포트되는 것도 있지만 자동으로 임포트되지 않는 것도 있다. 자동으로 임포트되지 않는 하위 패키지는 다음처럼 수동으로 임포트 해야 한다.
import sklearn.preprocessing
dir(sklearn.preprocessing)
['Binarizer',
'FunctionTransformer',
'Imputer',
'KernelCenterer',
'LabelBinarizer',
'LabelEncoder',
'MaxAbsScaler',
'MinMaxScaler',
'MultiLabelBinarizer',
'Normalizer',
'OneHotEncoder',
'PolynomialFeatures',
'QuantileTransformer',
'RobustScaler',
'StandardScaler',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'_function_transformer',
'add_dummy_feature',
'binarize',
'data',
'imputation',
'label',
'label_binarize',
'maxabs_scale',
'minmax_scale',
'normalize',
'quantile_transform',
'robust_scale',
'scale']
패키지에 포함된 함수 등을 사용하기¶
패키지에 포함된 함수 등을 사용할 때는 앞에 패키지 이름(import ~ as ~
명령을 사용하였을 때는 패키지 별명)과 마침표(.)을 붙인 후 사용해야 한다. IPython이나 Jupyter 등을 사용할 때는 마침표까지만 입력하고 탭(TAB)키를 누르면 자동 완성 기능을 지원한다.
import numpy as np
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
선택적 임포트¶
패키지를 임포트할 때 다음과 같이 특정한 명령어들만 선택적으로 임포트할 수도 있다.
from 패키지이름 import 명령어
또는
from 패키지이름 import 명령어1, 명령어2, 명령어3
선택적으로 임포트했을 때는 패키지 이름과 마침표 없이 바로 명령어를 사용할 수 있다.
from numpy import arange
arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
패키지 안의 모든 명령을 선택적 임포트할 때는 명령어 이름 대신 * 기호를 사용하는데 이를 와일드 임포트(wild import)라고 한다. 와일드 임포트할 때는 뜻하지 않게 기존의 변수나 함수를 덮어 쓸 때가 있을 수 있으므로 특별한 상황이 아니면 사용하지 말아야 한다.
예를 들어 f
라는 이름의 함수를 정의한 후에 SciPy 패키지의 stats 서브패키지를 와일드 임포트하면 F 분포를 나타내는 f
명령이 새롭게 임포트되면서 기존의 함수를 없애버릴 수 있다.
def f():
print("I am f function!")
f()
I am f function!
from scipy.stats import *
f()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-c43e34e6d405> in <module>()
----> 1 f()
~/anaconda3/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in __call__(self, *args, **kwds)
770
771 def __call__(self, *args, **kwds):
--> 772 return self.freeze(*args, **kwds)
773 __call__.__doc__ = freeze.__doc__
774
~/anaconda3/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in freeze(self, *args, **kwds)
767
768 """
--> 769 return rv_frozen(self, *args, **kwds)
770
771 def __call__(self, *args, **kwds):
~/anaconda3/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in __init__(self, dist, *args, **kwds)
435
436 # a, b may be set in _argcheck, depending on *args, **kwds. Ouch.
--> 437 shapes, _, _ = self.dist._parse_args(*args, **kwds)
438 self.dist._argcheck(*shapes)
439 self.a, self.b = self.dist.a, self.dist.b
TypeError: _parse_args() missing 2 required positional arguments: 'dfn' and 'dfd'