서론
이 장은 파이썬 package에 대해서 설명하고 PyPi로 배포하여 pip로 설치해 사용하는 방법에 대해서 설명한다.
먼저 package라는 개념에 대해서 이해해야 하는데, 이를 알기 위해서는 모듈이라는 것이 무엇인지 알아야한다.
What is Module?
변수나 함수, 클래스 등을 모아놓은 파이썬 파일(.py)을 모듈이라고 한다.
기본적으로 파이썬 파일(.py)하나가 하나의 모듈이 된다.
모듈을 사용하는 대표적인 이유는 재사용에 효율적이기 때문이다.
How to use Module?
Case 1.
모듈을 사용할 때 모듈 이름을 앞에 붙여줘야 하는 이유는 파이썬이 어느 파일을 봐야 변수/함수/클래스를 찾을 수 있는지 알 수 있기 때문이다. 이러한 구조를 name space라고 한다
import my_module
my_module.func1()
Case 2.
아래 코드의 경우 모듈을 앞에 쓰지 않아도 import한 모듈의 변수/함수/클래스에 접근이 가능하다.
from my_module import func1, MyClass1
func1()
a = MyClass1()
단, 위의 경우 주의 할 점이 있다. 모듈에 같은 함수가 있는 경우 충돌이 날 수 있기 때문이다.
아래는 충돌이 나는 경우의 예시이다.
# module1.py
def process():
print("module1 process function")
# module2.py
def process():
print("module2 process function")
위 에는 하나의 코드로 되어있지만 각각 파이썬 스크립트(.py) 파일로 분리되어 있다고 생각하자.
이 때 아래와 같이 작성하면 문제가 발생함으로 변수/함수/클래스 이름이 있다면 충돌날 수 있다.
# main.py
from module1 import process
from module2 import process # 이 import는 위의 import를 덮어쓴다
process() # "module2 process function"이 출력된다
Case 03
as 키워드를 통해 별칭을 줄 수 있다. 여러 모듈을 import할 때 동일한 변수/함수/클래스 이름이 있다면 충돌날 수 있는데, as 키워드를 사용하여 이를 방지할 수 있다.
import my_module as m1
from my_module2 import func1 as f1
from my_module3 import func2 as f2
a = m1.MyClass1()
f1()
f2()
What is Packaging?
패키징이란 여러 파이썬 파일들(여러 모듈)을 모은 디렉토리를 패키지라고 한다.
패키지를 사용하는 이유
- 모듈에 코드가 너무 많아서 한 파일에 다 넣기에 비효율적일 때
- 공동 작업이나 유지보수에 유리
- 네임스페이스 관리로 인한 이름 충돌 방지
Packaging 방법
PYPI 회원가입
아래 링크에 접속해 회원가입을 진행한다. 이때 이메일 인증을 해야하며 2차보안 설정을해 token까지 만들어줘야한다. 회원가입시 Name과 UserName이 있는데 아이디에 사용되는 것이 UserName이다.
토큰을 만들어주면 아래와 같이 프로필 설정에 나타나게 되는데 여기서 options를 눌러 키값을 복사할 수 있다.

복사가 완료되면 파이썬 패키징을 등록할 때 아이디와 비밀번호를 넣게 되는데 이때 ID: __token__ 을 입력해주고 비밀번호는 위 토큰 키값을 입력해주면 된다.
❗ 회원가입에 사용했던 UserName과 PWD로 입력할 경우 권한 오류가 뜨면서 패키징이 업로드 되지 않는다.
MetaData 설정
패키징을 하기 위해서는 setup.py를 작성해야 한다.
root 디렉토리에 생성하며 대부분의 빌드설정이 setup.py 통해 진행된다.
아래와 같이 작성해준다.

자세히 패키징하는 법
https://minimin2.tistory.com/189
특정 가상환경에 설치하는법
python3 -m pip3 install test-packaging-name==0.0.1
python3 -m pip install --upgrade test-packaging-name==0.0.2
설치된 패키지 보는법
python3 -m pip list
python3 -m pip show test-packaging-name
https://medium.com/@jspark141515/python과-python-패키지는-어디에-설치될까-2f2f31fc9baf
[referece]
Comment