스터디/파이썬 스터디 강의자료

[3팀/김경은] 9주차 파이썬 스터디 - 모듈과 패키지

경은 2023. 5. 24. 23:31

데이터 과학을 위한 파이썬 프로그래밍 교재를 사용하여 작성한 강의자료입니다.

9차시_패키지_강의안.pdf
1.57MB
9차시_패키지_과제.pdf
1.59MB

모듈의 개념

  • 모듈(module)은 프로그래밍 언어에서만 나오는 개념은 아니다.
  • 2014년 구글Google에서는 모듈형 휴대전화를 만들어 판매하는 내용의 ‘Ara’라는 프로젝트를 실행한 적이 있다. 휴대전화에 들어가는 카메라, 메모리, 와이파이 등을 하나의 블록으로 개별 판매하고 조립할 수 있는 환경을 만들어주는 프로젝트였다.
  • 레고 블록은 그 하나만으로도 제품이지만, 다른 블록들과 연결하거나 큰 밑판에 조립해 나감으로써 거대한 작품을 만들 수 있다. 이때 레고 블록 하나하나가 바로 모듈이라고 할 수 있다.
  • 이외에도 자동차 부품이나 벽돌 등도 하나의 모듈 개념으로 제작된다고 볼 수 있다.
  • 프로그래밍에서 모듈이라는 개념은 무엇일까?
    • 프로그래밍에서의 모듈은 작은 프로그램 조각을 뜻한다. 즉, 하나하나 연결해 어떤 목적을 가진 프로그램을 만들기 위한 작은 프로그램이다. 각 모듈 역시 저마다 역할이 있어서 서로 다른 모듈과 인터페이스 interface만 연결되면 사용할 수 있다.
    • 인터페이스의 개념
      • 함수에서 매개변수를 입력하는 약속
      • 다시 말해 해당 모듈을 사용하기 위해서는 모듈 간의 연결을 위한 약속이 필요한데, 이것을 인터페이스라고 한다.
    • 주변에서의 모듈화하여 서비스되고 있는 프로그램
      • 대표적인 예가 카카 오 서비스에서 제공하는 게임 프로그램이다.
      • 스마트폰을 통해 카카오 계정으로 특정한 카카오 게임을 하면 대부분 비슷한 인터페이스로 게임이 실행된다. 이는 카카오에서 모듈화 된 프로그램을 인터넷에 제공함으로써 다양한 게임 개발사가 이것을 사용할 수 있도록 지원하기 때문이다.
      • 이렇게 모듈화된 프로그램을 사용하면 다른 개발자가 만든 프로그램이나 자신이 만든 프로그램을 매우 쉽게 사용할 수도, 또는 제공할 수도 있다.

random 모듈

  • 난수를 쉽게 생성시켜 주는 모듈이다.
  • >>> import random >>> random.randint(l, 1000) 198
  • 1〜1000 중 임의의 숫자가 생성된다.
  • 여기서는 import 구문이 중요하다. import 구문은 뒤에 있는 모듈, 즉 random을 사용할 수 있도록 호출하라는 명령어이다.
  • 사용한다는 말은 해당 모듈을 메모리에 올리라는 뜻이다. 다음으로 해당 모듈의 이름을 사용하여 그 모듈 안에 있는 함수, 여기서는 randint() 함수를 사용하고 있다. randint() 함수를 사용하기 위해서는 이 randint 함수의 인터페이스, 즉 매개변수의 설정이 어떻게 되어 있는지 알아야 한다.

패키지의 개념

  • 패키지 packages는 모듈의 묶음이다.
  • from은 모듈을 호출하기 위해 패키지부터 호출하는 명령어이다.

  • 위와 같이 일종의 디렉터리처럼 하나의 패키지 안에 여러 개 의 모듈이 있는데, 이 모듈들이 서로 포함 관계를 가지며 거대한 패키지를 만든다.

모듈 만들기 실습

  • 파이썬에서는. py 파일 자체가 모듈이다.
  • 가장 쉽게 파이썬 모듈을 만드는 방법은 현재 실습 중인 디렉터리에서. py 파일을 하나 만들고, 그 파일에 필요한 함수를 저장하면 된다. 그러면 다른 파이썬 파일이나 파이썬 셸에서 import문을 사용하여 해당 모듈의 함수를 쉽게 불러낼 수 있다.

‘fah_converter.py’로 저장

def covert_c_to_f(celcius_value):
    return celcius_value * 9.0/5+32

해당모듈을사용하는 코드 (흔히 클라이언트 코드라고 부름)를 위와 같이 작성하여 ‘module_ex.py'로 저장

import fah_converter 

print("Enter a celsius value:")
celsius = float(input())
fahrenheit = fah_converter.covert_c_to_f(celsius)
print("That's", fahrenheit, "degrees Fahrenheit.")
Enter a Celsius value:
10                              #사용자 입력 
That's 50.0 degrees Fahrenheit. #결과값 출력
  • 가장 중요한 핵심 코드는 1행의 import fah_converter로, 기존에 만든 코드 파일에서. py를 빼고 해당 파일의 이름만 입력하면 파일 내의 함수를 불러 사용할 수 있다.
  • 즉,. py 자체가 하나의 모듈이 된다.
  • 이 코드에서는 fah_converter가 모듈이고, 해당 모듈 안의 covert_c_to_f() 함수를 가져다 사용하기 위해서는 5행과 같이 fahrenheit = fah_ converter.covert_c_to_f (celsius)라고 작성하면 된다.
  • 핵심은 호출받는 모듈과 호출하여 사용하는 클라이언트 프로그램이 같은 디렉터리 안에 있어야 한다는 것이다. 여기서는 fah_converter.py와 module_ex.py가 같은 디렉터리 안에 있어야 문제없이 실행된다.

 

네임스페이스

  • 네임스페이스는 모듈 호출의 범위를 지정하는 것이다.
  • 하나의 모듈안에는 클래스, 함수, 변수가 있으며 import를 사용하여 이들을 호출할 수 있다.
  • 하지만 때로는 클라이언트 프로그램의 함수 이름과 호출된 모듈의 함수 이름이 같은 경우가 있다. 이렇게 프로그램을 만드는 것이 좋은 습관은 아니지만 익숙하지 않아 발생하는 실수일 수도 있고 필요에 따라 기존 클래스를 상속받아 사용하다가 발생할 수도 있다.
  • 이 경우 호출된 모듈의 사용 범위를 명확히 지정해야 한다. 이때 사용하는 개념이 바로 네임스페이스이다.
  • 모듈 이름에 알리아스를 생성하여 모듈 안으로 코드를 호출하는 방법
    • 알리아스는 일종의 별칭으로 모듈의 이름을 바꿔 부를 때 사용한다. 모듈의 이름이 너무 길거나 다른 코드와 헷갈리는 이름일 때 as 키워드를 사용하여 모듈의 이름을 간단하게 바꿔 사용하면 된다.
    import fah_converter as fah
    print(fah.covert_c_to_f(41.6))
    
    106.8800000000000
    
    • 1행에서 이전에 만든 fah_converter 모듈을 fah로 이름을 변경하여 호출하였다.
    • fah.covert_c_to_f(41.6) 코드로 fah_converter 모듈 안에 covert_c_to f() 함수를 호출하였다.
    💡 ‘모듈명.함수명(또는 클래스명/변수명)’
    • 위의 형태로 해당 모듈 안에 있는 함수, 클래스, 변수를 호출하여 사용할 수 있다.
    • 현재 사용하는 클라이언트 프로그램에 같은 이름의 코드가 있더라도 모듈 내에서만 한정하여 호출해야 한다.

from 구문을 사용하여 모듈에서 특정 함수 또는 클래스만 호출하는 방법

import covert_c_to_f
2 print(covert_c_to_f(41.6))
106.88000000000001
  • ‘from 모듈명 import 모듈 안에 있는 함수명’의 형태로 작성하면 해당 모듈 안에 있는 함수를 가져다 사용할 수 있다. 이제 이 함수는 별도의 모듈명을 써 주지 않아도 단독 사용이 가능하다.
  • 여기서 한 가지 주의할 점은 from은 꼭 모듈을 호출하기 위한 키워드가 아니라는 것이다. 패키지를 호출하거나 해당 패키지 안에 있는 모듈을 호출할 때도 from 키워드를 사용할 수 있다.
  • 패키지와 패키지, 패키지와 모듈 간에는 서로 중첩구조를 가질 수 있고 이 중첩 구조를 호출하는 것이 바로 from의 역할이다.

해당 모듈 안에 있는 모든 함수, 클래스, 변수를 가져오는 별표(*)를 사용하기

  • 해당 모듈 안에 있는 모든 함수, 클래스, 변수를 가져오는 별표(*)를 사용하기
    • 일반적으로 컴퓨터에서 별표는 곱셈의 의미도 있지만 모든 것이라는 뜻도 있다.
    from fah_converter import * 
    print(covert_c_to_f(41.6))
    
    106.88000000000001
    
    • ‘from 모듈명 import 수’라고 입력하면 해당 모듈 안에 있는 모든 사용 가능한 리소스를 호출한다는 뜻이다.

가장 선호하는 방법

  • 일반적인 방법은 알리아스를 생성하여 호출하는 방법이다.
  • 각각의 함수나 클래스가 어디서 나오는지를 명확히 표현하는 것이 좋기 때문에 같은 함수라도 covert_c_to_f보다 fah.covert_c_to_f라고 표기하는 것이 코드를 보는 입장에서는 코드의 출처를 명확히 알 수 있어서 좋다.

내장 모듈의 사용

 

  • 파이썬은 프로그래밍을 개발하기 위해 기본적으로 사용해야 하는 문자 처리, 웹, 수학과 관련된 다양한 내장 모듈을 제공하며, 별다른 조치 없이 import문 한 줄로 사용할 수 있다.
  • random 모듈
    • 이 모듈 안에는 정수 모듈을 생성하는 randint() 함수와 임의의 난수를 생성하는 random() 함수가 있다.
    >>> import random
    >>> print(random.randint (0, 100))  # 0-100 사이의 정수 난수를 생성
    7
    >>> print(random.random())          # 일반적인 난수 생성
    0.056550421789531846
    
  • time 모듈
    • 시간과 관련된 time 모듈은 일반적으로 시간을 변경하거나 현재 시각을 알려준다.
    • 대표적으로 프로그램이 동작하는 현재 시각을 알 수 있다.
    >>> import time
    >>> print (time.localtimeO) # 현재 시각 출력 
    time.struct_time(tm_year=2018, tm_mon=8, tm_mday=19, tm_hour=22, tm_min=9, 
    tm_sec=21, tm_wday=6, tm_yday=231, tm_isdst=0)
    
  • urlib 모듈
    • 웹과 관련된 urllib 모듈은 웹 주소의 정보를 불러온다.
    • 대표적으로 urllib의 request 모듈을 사용하면 특정 URL의 정보를 불러올 수 있다. urllib.request.urlopen() 코드에서 괄호 안에 특정 웹 주소를 입력하면 해당 주소의 HTML 정보를 가져온다.
    >>> import urllib.request
    >>> response = urllib.request.urlopen("<http://theteamlab.io>") 
    >>> print(response.read())
    
    [참고]
    • 이외에도 많은 파이썬 모듈이 있다 그렇다면 이 모듈들은 어떻게 불러와 사용할 수 있을까?
    • 가장 좋은 방법은 구글에서 검색하는 것이다. 특히 영어로 검색하는 것이 좋다.
    • 💡 python time module run time파이썬 코리아에 문의하기
      • 파이썬 개발자에게 많은 정보를 제공하는 대표적인 커뮤니티
      💡 https://www.facebook.com/groups/pythonkorea
    • 프로그래밍 수행에 걸린 시간을 알아내는 모듈을 찾을 때

패키지의 구성

  • 패키지는 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음이다.
  • 모듈은 하나의 파일로 이루어져 있고, 패키지는 파일이 포함된 디렉터리(폴더)로 구성된다. 즉, 여러 개의 , py 파일이 하나의 디렉터리에 들어가 있는 것을 ‘패키지’라고 한다.
  • 흔히 다른 사람이 만든 프로그램을 불러와 사용하는 것을 라이브러리 library라고 하는데. 파이 썬에서는 패키지를 하나의 라이브러리로 이해하면 된다. 파이썬에서 사용하는 파이썬 오픈소스 프로그램은 모두 이러한 패키지로 구성되어 있다.
  • 파이썬의 모듈을 구성할 때와 마찬가지로 패키지에도 예약어가 있다. 패키지에서 한 가지 주 의할 점은 파일명 자체가 예약어를 반드시 지켜야만 실행되는 경우가 있다. 따라서 패키지 내의 몇몇 파일에는 init,__ main__ 등의 키워드 파일명이 사용된다.

패키지 만들기 실습

인터넷에서 주식 정보를 받아와 데이터베이스에 저장하고, 필요한 정보를 계산하는 프로그램

  • 실제로 프로그램을 만드는 것은 아니고 대략 이러한 방식으로 패키지를 구성한다는 개념만 알아보기 위한 실습이다.
  1. 디렉터리 구성하기
    • 실습에서 만들 패키지 이름은 ‘roboadvisor’
    • 패키지 이름 대부분은 소문자를 사용 하기 때문에 소문자로 패키지 이름을 지정
    • roboadvisor에는 세 가지 기능이 있다고 가정
    crawling(크롤링): 주식 관련 데이터를 인터넷에서 가져오는 기능 database(데이터베이스): 가져온 데이터를 데이터베이스에 저장하는 기능
    • 패키지를 구성하기 위한 첫 번째 단계는 각 패키지 내에서 다시 세부 패키지에 맞춰 디렉터리를 구성하는 것이다. 먼저 cmd 창에 다음 명령을 입력하여 디렉터리를 생성한다.
    mkdir roboadvisor
  2. crawling mkdir
  3. database mkdir analysis
  4. cd roboadvisor mkdir
  5. analysis(분석): 해당 정보를 분석하여 의미 있는 값을 뽑아내는 기능

디렉터리별로 필요한 모듈 만들기

  • 하나의 패키지는 중첩된 구조로 만들 수 있으므로 패키지 안에 또 하나의 패키지가 들어갈 수 있다. 하지만 이렇게 각각의 디렉터리를 하나의 패키지로 선언하기 위해서는 예약된 파일을 만들어야 한다.
  • 바로 _ _ init _ _.py 이다.

  • _ init _. py 파일은 각 디렉터리가 패키지임을 나타내는 예약 파일이다.
  • 위의 사진처럼 기본 .py 모듈 파일과 함께 각 디렉터리에 _ init _.py를 추가하면 패키지의 기본 구조가 만들어진다. 각각의 디렉터리 안에 .py 파일을 만들어 구성한다.

패키지의 구조 설계

💡 위 사진의 패키지 구조는 임의로 작성한 것이다. 패키지의 구조를 만들기 위해 프로그램 개발자는 설계 과정을 거쳐야 한다. 하위 패키지별로 해야 하는 일과 하위 패키지에 소속된 모듈들이 해야 할 일을 따로 정의해 각 모듈에 역할을 부여하는 것이다.

각 하위 패키지에 포함된 모듈에 필요한 기능을 구현하기 위한 코드 작성

  • 최소한 실행 여부만 확인하기 위해 간단한 코드를 입력
def series_test(): 
    print("series")
def statics_test():
    print("statics")
  • 위 두개의 코드는 analysis 디렉터리에 있는 series.py와 statics.py에 들어갈 코드이다.
>>> from roboadvisor.analysis import series 
>>> series.series_test()
series
  • 이렇게 작성한 모듈을 실제로 사용하기 위해서는 파이썬 셸에서 위과 같이 입력한다.
  • 이때 roboadvisor의 상위 디렉터리에서 파이썬 셸을 실행해야 정상적으로 수행된다.
  • 이 코드를 실행하면 roboadvisor 디렉터리 안에 ‘_ _ pycache _ _’라는 디렉터리가 생성되는데, 이것은 파이썬의 언어적 특성으로 생기는 결과이다.
  • 파이썬은 인터프리터 언어이므로 실행 전에 별도의 컴파일러를 실행시키지는 않지만, 실행 시점에 컴파일이 이루어지고 그 결과로 얻어진 컴파일된 파일을 프로그램에 사용한다. _ _ pycache _ _ 디렉터리에는 해당 프로그램이 작동될 때 사용하기 위한 모듈들의 컴파일 결과를 저장한다.
  • 이렇게 한번 pycache 디렉터리가 생성되면 그 시점에서 해당 모듈을 수정해도 결과가 반영되지 않는다. 해당 프로그램 또는 파이썬 셸이 완전히 종료한 후 수정해야 해당 모듈의 결과가 반영된다. 인터프리터 언어이지만 내부적으로 컴파일 과정도 거치고, 효율적으로 사용하기 위한 여러 가지 과정을 거친다.

디렉터리별로 _ _ init _ _.py 구성하기

  • 3단계에서는 디렉터리별로 _ _ init _ _.py 파일을 구성한다.
  • _ _ init _ _은 해당 디렉터리가 파이썬의 패키지라고 선언하는 초기화 스크립트이다.
  • _ _ init _ _.py 파일은 파이썬의 거의 모든 라이브러리에 있다. 예를 들어, 대표적인 파이썬 머신러닝 라이브러리인 scikit-learn의 경우 아래 그림과 같이 가장 상위 디렉터리부터 _ _ init _ _.py 파일이 있는 것을 확인할 수 있다.

  • _ _ init _ _.py 파일은 패키지 개발자나 설치 시 확인해야 할 내용 등의 메타데이터라고 할 수 있다.
  • 하지만 가장 중요한 내용은 이 패키지의 구조이다. 일반적으로 _ _ init _ _.py 파일에는 다음과 같이 해당 패키지가 포함된 모듈에 관한 정보가 있다.아래 코드를 roboadvisor 디렉터리의 _ _ init _ _.py에 입력해보자.
import analysis
import crawling
import database

__all__= ['analysis', 'crawling', 'database']
  • roboadvisor 디렉터리에는 3개의 하위 패키지, 즉 analysis, crawling, database가 있다.
  • 이 각각의 패키지를 _ _ init _ _.py 안에 __all__과 import문을 사용해 선언해야 한다. 따라 서 _ _ all _ _이라는 리스트형의 변수를 만들어 차례대로 하위 패키지의 이름을 입력하고, 같은 방법으로 각 하위 패키지를 import문으로 호출한다.
  • 하위 패키지의 _ _ init _ _.py 파일도 마찬가지이다.
from . import series
from . import statics

__all__= ['series', 'statics']
  • 예를 들어 analysis 디렉터리의 _ _ init _ _.py 파일은 위 코드와 같이 각 패키지에 포함된 모듈명을 모두 작성해야 한다. 상당히 번거로운 작업이지만 패키지로 표시하기 위해 꼭 해야 하는 작업이며 패키지별로 모두 처리해야 한다.
  • crawling과 database 디렉터리의 _ init,py 파일에도 같은 방식으로 코드를 입력하고 저장한다.

[참고]

  • ‘from .’을 import문 앞에 붙이는 이유는 현재 디렉터리인 analysis의 패키지를 호출하기 위함이다. ‘from .’을 붙이지 않으면 상위 디렉터리인 roboadvisor에서 series나 statics 패키지를 찾게 되어 오류가 발생한다.

_ _ main _ _.py 파일 만들기

 

  • 4단계에서는 패키지를 한 번에 사용하기 위해 roboadvisor 디렉터리에 _ _ main _ _.py 파 일을 만든다.
  • _ _ main _ _.py 파일을 만드는 이유는 패키지 자체를 실행하기 위해서이다. 지 금까지 계속 파이썬 파일명 형태인 .py 파일로 만들어 실행하였다. 같은 방법으로 패키지 자 체를 실행하기 위해 만들어야 하는 것이 _ _ main _ _.py 파일이다.
  • _ _ main _ _.py 파일의 구성은 기본적으로 호줄해야 하는 여러 모듈을 from과 import문으로 호출한 후, if _ _ name _ == ‘ _ main _ _’ 실행 코드를 작성하면 된다.
from analysis.series import series_test
from crawling.parser import parser_test

if _ _ name _ _ == '_ _ main _ _':
    series_test()
    parser_test()
  1. 실행하기 (패키지 이름만 호출)
  • 마지막 5단계에서는 해당 패키지를 실행한다.
  • 모든 코드를 작성한 후 해당 패키지의 최상위 디렉터리(이 예시에서는 roboadvisor의 상위 디렉터리)에서 ‘python 패키지명'을 입력하여 실행한다.
python 
roboadvisor series
parser

[참고]

  • 그림과 같이 roboadvisor 디렉터리에서 패키지를 실행하면 오류가 발생한다. 반드시 최상위 디렉터리에서 패키지를 실행한다.

패키지 네임스페이스

  • 패키지 내에서 모듈을 서로 호출할 때 사용하는 패키지 네임스페이스(packages namespace)
  • 모듈과 달리 패키지에서의 네임스페이스는 훨씬 더 많은 중간 단계를 거치므로 조금 복잡하다.
  • 패키지 네임스페이스는 크게 절대 참조와 상대 참조로 나눈다.
  • 절대 참조는 전체 패키지의 구조를 생각해 모듈의 경로path를 모두 호줄하는 것이고, 상대 참조는 호줄하는 디렉터리를 기준으로 호출하는 것이다.

절대 참조

💡 from roboadvisor.analysis import series

 

  • 위 코드에서 from은 roboadvisor부터 시작한다.
  • 즉 패키지 이름부터 시작하여 series까지 모든 경로를 입력한다. ‘from 전체 패키지.서브 패키지 import 모듈’의 형식이다.
  • 이렇게 전체 경로를 모두 입력하는 것을 절대 참조라고 한다.
  • 일반적으로 패키지 내부에서 다른 패키지를 부를 때 가장 많이 사용하는 방법이며,_ init ** _ .**py 파일을 만들 때도 절대 참조로 모 을 호출하는 것이 좋다.
  • 한 가지 주의할 점은 가장 상위에 있는 _ init ** _**.py 파일도 상위 디렉터리 roboadvisor를 넣는 것이 좋다.
__all__= ['analysis', 'crawling', 'database']

from roboadvisor import analysis
from roboadvisor import crawling
from roboadvisor import database
  • 위처럼 작성해야 다른 서브 모듈에서도 모듈을 쉽게 호출할 수 있다.

상대 참조

  • 상대 참조의 핵심은 현재의 디렉터리를 기준으로 모듈을 호출하는 것이다.
from .series import series_test
from ..crawling.parser import parser_test
  • 여기서 가장 중요한 코드는 .series와 ..crawling.parser이다.
  • 먼저 점 1개(.)는 현재 디렉터리를, 점 2개(..)는 부모 디렉터리를 뜻한다.
  • 패키지 구조에서 보았던 그림과 같은 패키지 구조라면 현재 디렉터리에서 series 모듈 안의 seriesJest 함수를 호출하라는 뜻이다. 즉, 현재의 디렉터리는 series 모듈을 포함하고 있는 analysis이다.
  • 하지만 패키지 내에서는 상대 참조로 호출하는 것을 추천하지 않는다.
  • 코드를 간략히 사용할 수 있다는 장점이 있지만, 패키지 전체를 보는 입장에서는 모든 패키지의 경로를 정확히 기록 하는 것이 좀 더 이해하기 쉽다. 이것은 _ init ** _**.py 파일을 선언할 때도 마찬가지이다. 가능하면 패키지 내에서 모듈을 정의할 때는 절대 참조를 사용하는 것이 좋다.

 

가상환경의 개념

  • 다른 개발자가 만든 패키지를 직접 사용하는 방법인 가상환경
  • 만약 한 번에 하나의 프로젝트만 진행하는 것이 아니라 2개 이상의 프로젝트를 진행하게 된다면 각 프로젝트에 맞는 프로 그래밍 환경을 설정하는 것이 좋다.
  • 예를 들어, 데이터를 다루는 프로젝트나 웹을 다루는 프로젝트는 그 성격이 매우 다르다. 따라서 각 프로젝트에 맞는 환경을 설정하여 진행해야 한다.
  • 파이썬에서는 이러한 경우를 지원하기 위해 가상환경이라는 개념으로 프로젝트 패키지를 관 리하는 도구를 제공한다.
  • 일반적으로 어떤 프로젝트를 수행할 때는 파이썬 코드를 수행할 기본 인터프리터뿐만 아니라 프로젝트별로 필요한 추가 패키지까지 설치해야 한다.
  • 이러한 패키지를 설치할 때 서로 다른 프로젝트가 영향을 주지 않도록 독립적인 프로젝트 수행 환경을 구성할 수 있는데, 이를 ‘가상환경’이라고 한다.
  • 이 가상환경을 구축하기 위해 패키지 관리 도구를 사용한다. 대표적인 가상환경 도구로 virtualenv와 conda가 있다.
  • virtualenv는 파이썬에서 기본적으로 제공하는 가상환경 도구로 pip을 이용하여 새로운 패키지를 설치할 수 있다. conda는 교재에서 사용하는 인터프리터인 miniconda의 전용 패키지 관리 도구로 가상환경 관리와 패키지 설치를 같이 할 수 있다.
  • 일반적으로 virtualenv와 pip을 사용하여 새로운 패키지를 설치하는 것이 좋다.
  • 하지만 운영체제 대부분이 윈도이므로 교재에서는 conda를 사용하여 진행한다. 또한, 파이썬 패키지는 대부분 파이썬 코드뿐 아니라 C 코드를 같이 설치할 때가 많아 컴파일된 C 파일을 설치해야 하는데, pip은 이를 지원해주지 않을 때가 많다. 그에 반해 conda는 이 부분까지 한 번에 모두 설치해주므로 처음 가상환경을 이용하는 사람에게 좀 더 적합하다.

가상환경 도구 특징

virtualenv + pip - 가장 대표적인 가상환경 관리 도구, 래퍼런스와 패키지가 가장 많음
conda - 상용 가상환경 도구인 miniconda 의 기본 가상환경 도구, 설치가 쉬워 윈도에서 유용

 

가상환경 설정하기

conda 를 사용하여 가상환경 설정하기

 

  • 가상환경 만들기
  • 다음 명령을 cmd 창에 입력

  • conda → 실행 명령어
  • create → 가상환경을 만드는 인수(argument)
  • -n my_project 에서 -n은 name의 줄임말이고, my_project는 구성할 가상환경 이름이다.
  • python=3.4는 설치되는 파이썬의 버전이다.
  • 즉, 위 명령어를 해석하면 ‘my_project라는 이름의 가상환경을 python 3.4 버전으로 만들어라.’이다.

  • ‘Proceed ([y]/n)?’에서 y를 입력하면 설치가 시작된다.

가상환경 실행하기

  • 구성한 가상환경 실행하기
  • 실행방법은 가상환경을 만들면 나타나는 화면에 이미 설명되어 있다.

 💡 activate my_project

 

  • 이 코드는 my_project라는 가상환경을 활성화activate하라는 뜻이다.
  • 구성된 가상환경의 이름을 activate 다음에 넣으면 해당 가상환경이 실행되고, 아래와 같이 프롬프트 앞에 (my_project) 라는 가상환경 이름이 붙는다. 이제부터는 해당 가상환경의 인터프리터만 실행 된다.

  • 이 상태에서 ‘where ptyhon’ 을 입력하면 현재 실행되는 파이썬의 위치가 어디인지 출력

  • 실행된 가상환경을 종료하기 위해서는 ‘deactivate’를 입력

가상환경 패키지 설치하기

  • 해당 가상환경에서 새로운 패키지를 설치해보기
  • 패키지의 종류는 매우 많고, 테스트할 수 있는 종류도 많다. 일단 패키지를 설치하기 위해 서는 다음과 같은 명령어를 입력한다

💡 conda install matplotlib

가상환경 패키지 실습하기

  • 설치된 패키지를 실행
  • 앞에서 설치한 matplotlib은 대표적인 파이썬 그래프 관리 패키지로, 엑셀과 같은 그래프를 화면에 출력한다. 현재 데이터 분석을 할 때 다양한 데이터 분석 도구와 함께 사용되고 있다.
>>> import matplotlib.pyplot as pit
>>> pit.plot([1, 2, 3, 4])
[<matplotlib.lines.Line2D object at 0x000001E8CC52C080>] 
>>> plt.ylabel('some numbers')
Text(0, 0.5, 'some numbers')
>>> plt.show()
  • 이 코드를 실행하면 아래의 그림과 같은 깔끔한 그래프 화면을 볼 수 있다.
  • matplotlib은 논문을 쓰거나 여러 가지 데이터 분석 결과를 보여줄 때 매우 유용한 모듈이다.

[참고]

jupyter 패키지

데이터를 분석할 때 매우 유용한 패키지로 jupyter가 있다.

먼저 패키지를 설치하기 위해 cmd 창에서 다음과 같은 명령어를 입력한다.

💡 conda install jupyter

 

설치가 끝나면 ‘jupyter notebook’을 입력하여 실행시킨다 이제 jupyter 환경에서 코딩할 수 있다.

 💡 jupyter notebook

 

jupyter를 실행하면 웹에서 코딩할 수 있는 환경이 나타난다 여기에서 [New] 버튼을 클릭하여 새로운 Notebook 을 생성 한 후 코딩하고[Ctri]+[Enter]를 누르면 결과를 볼 수 있다.