Python

[Python] Private PyPI Server 구성하기

ssun-g 2022. 4. 28. 12:35
public으로 올리는 법은 Link 참조.

 

PyPI server 설치

pip install pypiserver

 

private PyPI server 계정 관리

$ pip install passlib
$ htpasswd -sc htpasswd.txt {ID}
ex) htpasswd -sc htpasswd.txt jinsung

 

  • htpasswd 명령어 실행 이후 유저에 대한 비밀번호를 설정해준다.

 

서버 구동

pypi-server -p {PORT} -P htpasswd.txt {PACKAGE_DIRECTORY}
ex) pypi-server -p 5000 -P htpasswd.txt ./package_test

MacOS Monterey에서 port 5000 사용시 already use 오류가 발생할 수 있는데 해결 방법은 Link 참조.

 

  • localhost:5000 으로 접속하면 pypi-server가 동작하는 것을 확인할 수 있다.
  • 빨간 박스를 보면 아무런 패키지도 배포되지 않았음을 확인할 수 있다.

pypi-server

 

Client 설정

다음과 같이 파일 작성 후, OS에 맞게 저장한다.

[distutils]
index-servers =
    local

[local]
repository: {PRIVATE_SERVER_URL}
username: {ID}
password: {PASSWORD}

 

현재 사용중인 설정은 다음과 같다.

[distutils]
index-servers = 
    local

[local]
repository: http://192.168.1.13:5000
username: jinsung
password: 1234

 

MacOS

vim ~/.pypirc

 

Windows

C:\Users\{USER_NAME}\.pypirc

 

setup.cfg 설정

C extension을 포함하지 않고, python2, 3 버전에서 모두 작동해야 하는 경우 setup.cfg 파일을 다음과 같이 생성한다.

[bdist_wheel]
universal = 1

 

Python Package 업로드

  • 업로드를 위해 필요한 setup.py는 Link에서 작성한 setup.py의 형태를 참고한다.
  • local은 Client 설정에서 정해준 tag이다.
python setup.py bdist_wheel upload -r local

 

패키지 배포

 

다른 서버에서 패키지 다운로드

다운로드 받기 위해 pip, easy_install이 설치되어 있어야 한다.

 

pip

pip download --trusted-host {PRIVATE_SERVER_IP} --index-url {PRIVATE_SERVER_URL}/simple {PACKAGE_NAME}
ex) pip download --trusted-host 192.168.1.13 --index-url http://192.168.1.13:5000/simple cube_solver

 

easy_install

easy_install -i {PRIVATE_SERVER_URL}/simple {PACKAGE_NAME}
ex) easy_install -i http://192.168.1.13:5000/simple cube_solver

또는 서버에 접속하여 파일을 다운로드 받을 수 있다. (주소는 localhost 대신 private server url 입력)

 

세 가지 방법중 하나로 다운로드 받은 후 다음 명령을 수행하면 패키지를 현재 환경에 설치할 수 있다.

pip install {DOWNLOADED_WHEEL_FILE}
ex) pip install cube_solver-0.0.1-py3-none-any.whl