A A
[Python] Module, Package, Virtual Environment (모듈, 패키지, 가상환경)

모듈 (Module)

모듈은 파이썬 코드의 논리적인 단위로, 관련된 함수, 클래스, 변수 등을 하나의 파일에 모아놓은 것입니다.
  • 모듈을 사용하면 코드의 재사용성과 유지보수성을 높일 수 있으며, 코드의 구조를 더 체계적으로 관리할 수 있습니다.
  • 하나의 .py 파일이 하나의 모듈을 의미합니다.

모듈 가져오기

  • import 키워드를 사용하면 전체 모듈을 불러올 수 있습니다.
import math

print(math.sqrt(16))  # Output: 4.0
  • from 키워드를 사용하면 모듈에서 특정 함수, 클래스 등을 가져올 수 있습니다.
from math import sqrt

print(sqrt(16))  # Output: 4.0
  • as 키워드를 사용하여 모듈이나 항목에 별칭(alias)을 지정할 수 있습니다.
import numpy as np

print(np.array([1, 2, 3]))  # Output: [1 2 3]

표준 라이브러리와 사용자 정의 모듈

표준 라이브러리

  • 표준 라이브러리는 파이썬 설치 시 기본으로 제공되는 모듈 모음입니다
import datetime

now = datetime.datetime.now()
print(now)  # 현재 날짜와 시간 출력

import os

current_directory = os.getcwd()
print(current_directory)  # 현재 작업 디렉토리 출력

사용자 정의 모듈

Example 1. 모듈 파일 생성 (mymodule.py):
# mymodule.py
def greet(name):
    return f"Hello, {name}!"

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def display(self):
        return f"{self.name} is {self.age} years old."
Example 2. 모듈 사용
# main.py
import mymodule

print(mymodule.greet("Alice"))  # Output: Hello, Alice!

person = mymodule.Person("Bob", 25)
print(person.display())  # Output: Bob is 25 years old.

# 특정 항목만 가져오기
from mymodule import greet, Person

print(greet("Charlie"))  # Output: Hello, Charlie!

person = Person("Dave", 30)
print(person.display())  # Output: Dave is 30 years old.

패키지 (Package)

패키지는 관련된 모듈을 하나의 디렉터리로 묶은 것입니다.
  • 패키지를 사용하면 모듈을 논리적으로 그룹화하고, 코드의 구조를 체계적으로 관리할 수 있습니다.
  • 패키지 디렉터리에는 __init__.py 파일이 포함되어 있어야 합니다. 

예시 Directory 구조

mypackage/
    __init__.py
    module1.py
    module2.py

패키지 사용 예시

1. Package 디렉터리 및 모듈 생성

  • mypackage/__init__.py (빈 파일이어도 됩니다)
  • mypackage/module1.py
def function1():
    return "Function 1 from Module 1"

 

 

  • mypackage/module2.py
def function2():
    return "Function 2 from Module 2"

 

2. Package 사용

# main.py
from mypackage import module1, module2

print(module1.function1())  # Output: Function 1 from Module 1
print(module2.function2())  # Output: Function 2 from Module 2

pip: Python Package 관리 도구

pip는 Python 패키지 관리 도구로, 패키지를 설치하고 관리하는 데 사용됩니다.

Package install (패키지 설치)

pip install 패키지이름
# Example

pip install requests

Package Uninstall (패키지 제거)

pip uninstall 패키지이름
pip uninstall requests

설치된 패키지 목록 확인

pip list

Package Management (패키지 관리)

requirements.txt 파일

  • requirements.txt 파일은 프로젝트에 필요한 패키지 목록을 기록한 파일입니다.
  • 이 파일을 사용하면 프로젝트에 필요한 모든 패키지를 쉽게 설치하고 관리할 수 있습니다.

 

  • requirements.txt 파일 생성
pip freeze > requirements.txt
  • requirements.txt 파일 내용 예시
requests==2.25.1
numpy==1.19.5
pandas==1.1.5
  • requirements.txt 파일을 사용하여 패키지 설치
pip install -r requirements.txt

Virtual Environment (가상환경)

  • 가상환경은 프로젝트별로 독립적인 Python 환경을 제공하여 패키지 충돌을 방지하고 일관된 개발 환경을 유지할 수 있도록 합니다.
  • 이를 통해 서로 다른 프로젝트 간의 패키지 의존성 문제를 해결하고, 테스트 환경을 쉽게 관리할 수 있습니다.

 

venv 모듈 사용

1. 가상환경 생성

python -m venv 가상환경이름
# Example

python -m venv myenv

 

2-1. 가상환경 활성화 - Window ver.

가상환경이름\Scripts\activate
# Example

myenv\Scripts\activate

 

2-2. 가상환경 활성화 - macOS/Linux ver.

source 가상환경이름/bin/activate
# Example

source myenv/bin/activate

 

 

3. 가상환경 비활성화

deactivate

가상환경을 사용하는 이유?

그러면 왜 가상환경을 사용할까요? 이유를 한번 알아보겠습니다.

1. 프로젝트별 가상환경 설정

  • 각 프로젝트마다 독립적인 가상환경을 설정하여, 패키지 충돌을 방지할 수 있습니다.
  • 서로 다른 프로젝트에서 다른 버전의 패키지를 사용할 수 있으며, 각 프로젝트의 패키지 의존성을 관리할 수 있습니다.

2. 테스트 환경

  • 개발 환경과 별도의 테스트 환경을 설정하여, 안정적인 코드 배포를 할 수 있습니다.
  • 테스트 환경에서 코드와 패키지를 테스트하여, 실제 운영 환경에서 발생할 수 있는 문제를 미리 발견할 수 있습니다.

배포

배포는 작성한 모듈이나 패키지를 다른 개발자와 공유하기 위해 배포하는 과정입니다.
  • 이를 통해 코드의 재사용성을 향상시키고, 커뮤니티에 기여할 수 있으며, 프로젝트를 효과적으로 관리할 수 있습니다.
  • 조직 내에서 공통으로 사용하는 코드나 라이브러리를 패키지로 배포하거나, 오픈소스 커뮤니티에 유용한 패키지를 배포하여 기여할 수 있습니다.

 

배포 방법

1. PyPI (Python Package Index)

  • PyPI는 Python 패키지를 공유하는 공식 저장소입니다.
  • PyPI를 통해 다른 개발자들과 패키지를 공유하고 설치할 수 있습니다.

2. Package Build: sdist

  • sdist는 패키지를 소스 배포 형태로 빌드하는 도구입니다.
  • sdist 명령을 사용하여 패키지의 소스 배포판을 생성할 수 있습니다
python setup.py sdist

3. 패키지 업로드: twine

  • twine은 패키지를 PyPI에 업로드하는 도구입니다.
  • twine을 사용하면 안전하게 패키지를 업로드할 수 있습니다.
twine upload dist/*