[Python] pypicloud 로 사설 모듈 저장소 이용하기 Computer Tip

일전에 pypiserver 를 docker에서 돌리는 것을 해 본 적이 있습니다.

사설 파이썬 모듈을 관리하는데 이용하는 것은 문제 없지만,
UI 가 없기 때문에 관리 등을 하는 것에는 어려움이 있었습니다.

다행히 이런 것을 위해서 UI를 제공하는 pypicloud 라는 것이 있어서 이를 소개해 봅니다.
그런데 왜 이름이 cloud 가 붙었을까 하고 살펴보니, 백엔드 모듈이 저장되는 곳이
로컬 파일 뿐만 아니라, 아마존의 S3 또는 구글의 GCS에 저장할 수 있습니다.
모듈이 수십개가 아니라 수백개 이상 된다면 해당 모듈을 쉽게 찾아가고 하는 등의 
장점을 pypicloud가 제동한다고 보면 됩니다. 각 모듈을 위한 색인을 
SQLite 또는 Redis 등을 이용할 수 있으므로 상당히 빠르게 모듈을 찾는다고
보면 되겠습니다.

다음은 이용 방법입니다.

우선 설치는 다음의 명령으로 가능합니다.
(mypypi 라는 가상환경으로 동작한다고 하면)

(mypypi)$ pip install pypicloud[server]
라고 설치합니다.
(위에 [server] 대괄호는 server 용으로 waitress 라는 모듈을 extra로 설치를 더 한다는 의미입니다)

이제 설정파일 생성을 위해서,
(mypypi)$ ppc-make-config -t server.ini
라고 하면,

[1] s3
[2] gcs
[3] filesystem
[4] azure-blob
Where do you want to store your packages?
라고 물어보는데,
3을 넣고,

Admin username? mcchae
Password:
Password:

이렇게 사용자와 암호를 넣으면 관리자로 로그인하게 됩니다.
그러면 server.ini 파일이 생성됩니다.

이 상태에서,
(mypypi)$ pserve server.ini
라고 하면 
INFO 2020-07-28 20:06:36,239 [pypicloud.cache.base] Cache is empty. Rebuilding from storage backend...
INFO 2020-07-28 20:06:36,239 [pypicloud.cache.base] Cache repopulated
Starting server in PID 66774.
Serving on http://0.0.0.0:6543

와 같이 6543 포트로 접속가능하게 됩니다.

이제 해당 서비스를 브라우저로 들어가 보면,

위와 같이 보이고, 로그인을 눌러,

로그인을 하면,

위와 같이 보이고 UI를 통해 Upload 가 가능합니다. 로그인을 안하면, 다운로드 및 설치 등이 가능합니다.
(아래에서 자동으로 한꺼번에 명령으로 올리는 것도 해 보겠습니다)

상단에 Admin 을 눌렀는데.. 이상하게 사용자 가감을 할 수 있는 UI 가 있으면 좋겠는데,
왜 없지 싶었습니다.

상단에 "Rebuild package list"는 어떤 이유에서던지 실제 저장 모듈과 인덱스가 달라지거나, 삭제되었거나
했을 때 재 색인을 한다고 보면 되겠네요.

사용자 관리까지 포함하려면 이전 생성된 server.ini에서 다음과 같이 내용을 바꿔 줍니다.

우선 
#auth.admins = 
#mcchae
#user.mcchae=...
위의 내용에 첫 줄에 '#'를 넣어 막습니다. (mcchae 대신 자신의 id로 바꾸면 됩니다)

그 다음 다음의 줄을 추가합니다.
pypi.auth = sql
auth.db.url = sqlite:///%(here)s/authdb.sqlite

그리고 다시 동작시키면,

위에 처럼 최초 admin을 넣으라고 하고,
들어가면 일반 관리자 첫 화면이 보입니다.

이제 상단 Admin 을 선택하면,

위와 같이 사용자나 그룹 관리가 가능하게 됩니다.
"Create user" 를 눌러, "irene" 이라는 사용자를 추가하면,

추가된 모습이 보이는데, 여기서 자물쇠 표시는 "관리자"를 의미합니다.
추가된 사용자 역시 관리자로 바꿀 수 있는데, 해당 사용자를 클릭하고,

"Promote to admin"을 누르고, 다시 Admin 페이지로 가면,

irene 이라고 사용자가 보이고 역시 자물쇠가 있는 것을 확인할 수 있습니다.

위와 같이 직접 운영을 해도 되고 아니면,  docker 로 만들어 놓은 이미지를 이용할 수도 있는데,
다음을 확인하셔요.

다음으로는 명령행으로 한꺼번에 모듈을 밀어넣는 방법입니다.

다음 명령으로 pypi-uploader 모듈을 설치합니다.

pip install pypi-uploader

그 다음 다음과 같은 명령으로 업로드 할 수 있습니다.

pypiupload files -i http://localhost:6543/simple -u mcchae -p mypassword *.whl

그러면 모든 whl 확장자가 붙은 모듈을 업로드 가능합니다.
(*.tar.gz 등의 모듈도 업로드 할 수 있습니다)

참고로 기존의 pypiserver 에 비하여 차이점은,
packages 실제 저장위치에 확인해 보면,

pypiserver는 packages 폴더에 모든 모듈이 한꺼번에 올라가 있는 반면,
pypicloud는 packages 폴더 안에 

위와 같이 모듈이름/버전/ 폴더가 만들어 지고 그 아래에 실제 모듈파일 및 내부적으로 해쉬정보 등을 가진
.meta 파일이 있는 것을 알 수 있습니다.


어느 분께는 도움이 되셨기를 ..




덧글

댓글 입력 영역

구글애드텍스트