Pypi(Python Package Index) Python을 위한 공식적인 Third-party 소프트웨어 저장소이다.
주로 Python 라이브러리를 설치하기 위해 pip 명령어를 사용하는데, 이는 Pypi 저장소(https://pypi.org)를 통해 해당 Package를 설치한다.
이번 포스팅은 이런 Pypi 서버를 Private 형태의 로컬 저장소용 설치 및 개발한 Python 코드를 Packaging하여 로컬 저장소에 업로드 및 다운로드 하는 방법을 설명한다.
1. Private Pypi 설치
- pypiserver : https://pypi.org/project/pypiserver
$ sudo apt-get install python3-pip
$ sudo pip3 install pypiserver
- Package를 저장할 디렉토리 생성
$mkdir {Package Repository Directory}
ex) $mkdir ~/packages
2. Private Pypi 서버 계정 관리를 위한 passlib 설치
$ sudo apt-get install apache2-utils
$ sudo pip3 install passlib
$ htpasswd -sc htpasswd.txt {ID}
ex) htpasswd -sc htpasswd.txt programist
3. Private Pypi 서버 구동
$ pypi-server -p {PortNumber} -P htpasswd.txt {Package Repository Directory}
ex) pypi-server -p 8080 -P htpasswd.txt ~/packages &
- 브라우저를 통해 접속하면 다음과 같이 Pypi 서버가 정상적으로 동작하는 것을 확인할 수 있다.
4. Client 설정
- 다음과 같은 형식으로
$ vi ~/.pypirc
[distutils]
index-servers =
local
[local]
repository: {Priavte Server URL}
username: {ID}password: {Password]
- 현재 구축 환경에서는 다음과 같다.
5. Python 코드 Packaging을 위한 setup.py 작성
- Packaging을 하기 위해서는 setup.py 작성해야 한다.
- 자세한 setup.py에 대한 자세한 작성 방법은 아래 링크를 참고하면 된다.
(https://docs.python.org/3.5/distutils/setupscript.html)
6. Python 코드 Package 업로드
$ python3 setup.py bdist_wheel upload -r local
- 업로드 확인은 다음과 같이 Private Pypi 서버에서 확인이 가능하다.
7. Private Pypi 서버에서 Package 다운로드 및 설치
$ pip3 install --extra-index-url {Private Server URL} --trusted-host {Private Server IP} {Python Package Name}
ex) pip3 install --extra-index-url http://192.168.0.101:8080 --trusted-host 192.168.0.101 pypitest
- 다음과 같이 테스트용 Package인 Pypitest Package가 설치되는 것을 확인할 수 있다.