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'