PYPI는 the Python Package Index. 의 줄임말입니다. PYPI 는 간단하게 python 관련 패키지들이 모여있는 저장소라고 할 수 있습니다. python 개발자들은 자신이 개발한 python 모듈을 PYPI에 업로드 할 수 있으며 PYPI에 저장된 모듈은 누구에게나 공개되어 있습니다. 회사 내에서와 같이 보안이 중요한 곳에서 자신이 만든 모듈을 private 하게 구축하는 방법을 설명하겠습니다.
PYPI 설치
docker 를 사용하여 pypi 이미지를 다운 받습니다.
docker 설정
Usage 1
자세한 설정 방법은 docker hub 사이트에서 pypi 이미지를 검색하여 확인할 수 있습니다.
- mkdir의 -p 옵션: 상위 디렉토리를 포함한 디렉토리를 생성
- -p /srv/pypi: /srv 디렉토리를 생성한 후, /srv 디렉토리 내에 pypi 디렉토리를 생성
- touch: 파일의 날짜, 시간 정보를 변경하는 명령어
- 옵션이 없는 경우: 파일의 최근 변경된 시간을 서버의 현재 시간으로 변경하고 파일의 크기가 0인 빈 파일을 생성
Dockerfile
FROM codekoala/saltyarch
MAINTAINER Josh VanderLinden <codekoala@gmail.com>
RUN pacman -Sy --noconfirm --needed python-pip python-passlib && pip install -U pypiserver && mkdir -p /srv/pypi && rm -rf /var/cache/pacman/*
EXPOSE 80
VOLUME ["/srv/pypi"]
CMD ["pypi-server", "-p", "80", "-P", "/srv/pypi/.htaccess", "/srv/pypi"]
실행되었을 시, http://localhost:8080으로 접속하여 pypi 서버를 확인할 수 있다. /srv/pypi 디렉토리에 저장을 통해 .tar, .zip, .egg 등 단순하게 파일을 추가할 수 있다.
Private PYPI 업로드
압축 파일 다운로드
스크립트 작성
패키지 목록 확인
$ wget https://pypi.python.org/simple/
$ vi index.html
<html><head><title>Simple Index</title><meta name="api-version" value="2" /></head><body>
<a href='0-.-.-.-.-.-.-.-.-.-.-.-.-0'>0-._.-._.-._.-._.-._.-._.-0</a><br/>
<a href='00smalinux'>00SMALINUX</a><br/>
<a href='01changer'>01changer</a><br/>
<a href='02exercicio'>02exercicio</a><br/>
<a href='0805nexter'>0805nexter</a><br/>
<a href='0x10c-asm'>0x10c-asm</a><br/>
<a href='1'>1</a><br/>
<a href='1020-nester'>1020-nester</a><br/>
<a href='115wangpan'>115wangpan</a><br/>
...
버전 정보 확인
{
"info": {
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"cheesecake_code_kwalitee_id": null,
"keywords": null,
"package_url": "http://pypi.python.org/pypi/roundup",
"author": "Ralf Schlatterbeck",
"author_email": "rsc@runtux.com",
"download_url": "http://pypi.python.org/pypi/roundup",
"platform": "UNKNOWN",
"version": "1.5.1",
"cheesecake_documentation_id": null,
"_pypi_hidden": false,
...
"urls": [
{
"has_sig": true,
"upload_time": "2016-01-11T21:38:39",
"comment_text": "",
"python_version": "source",
"url": "https://pypi.python.org/packages/bf/14/d61fac5ed2aaca8c720ac4d4077428b8fdafa356089516ba9ee630975d2a/roundup-1.5.1.tar.gz",
"md5_digest": "54b21d185dd490ef8697f5a046607a44",
"downloads": 693,
"filename": "roundup-1.5.1.tar.gz",
"packagetype": "sdist",
"path": "bf/14/d61fac5ed2aaca8c720ac4d4077428b8fdafa356089516ba9ee630975d2a/roundup-1.5.1.tar.gz",
"size": 2618886
},
{
"has_sig": true,
"upload_time": "2016-01-11T21:40:16",
"comment_text": "",
"python_version": "any",
"url": "https://pypi.python.org/packages/a3/9b/24ea88db250e0d70106c12e3fe558fcc0eef669eb1afd6a4faba43cdff08/roundup-1.5.1.win32.exe",
"md5_digest": "1de1f40a0918c0075793bd8a3b53781b",
"downloads": 468,
"filename": "roundup-1.5.1.win32.exe",
"packagetype": "bdist_wininst",
"path": "a3/9b/24ea88db250e0d70106c12e3fe558fcc0eef669eb1afd6a4faba43cdff08/roundup-1.5.1.win32.exe",
"size": 2173662
}
]
}
SCP 명령어 사용
setup.py 사용
setup.py 파일을 만들어서 올리는 방법은 버전 관리를 하기에 아주 좋은 방법이다. 또한, 이 방법을 통해 자신의 개인 프로젝트를 Private PYPI에 올릴 수 있다.
관리자 설정
서버 관리자는 사용자의 아이디와 비밀번호를 정의해야 한다.
# 명령어 사용
$ htpasswd -s htaccess yourusername
# vi 로 작성
# http://www.htaccesstools.com/htpasswd-generator/ URI에 접속하여 사용자의 아이디와 비밀번호를 입력하고 나온 결과를 복사한다.
# 복사한 값을 아래 경로에 .htaccess 파일을 만든다.
$ cd /srv/pypi
$ sudo vi .htaccess
복사한 내용 (예, 사용자ID:암호화된비밀번호)
사용자 설정
윈도우
[distutils]
index-servers =
pypi
internal
[pypi]
username:pypiusername
password:pypipassword
[internal]
repository: http://<private pypi 서버 IP>:<port>
username:<할당된ID>
.pypirc로 저장하고 C:\Users\(로그인된 사용자 아이디) 에 저장합니다.
예) C:\Users\lha 에 저장
리눅스
index-servers =
pypi
internal
[pypi]
username:pypiusername
password:pypipassword
[internal]
repository: http://<private pypi 서버 IP>:<port>
username:<할당된ID>
setup.py 설정
setup (
name = 'mypackage',
version = '1.0.0',
py_modules = ['mypackage'], //name과 py_modules 는 동일한 이름이여야 합니다.
author = 'lha',
author_email = 'lha@lha.com',
description = '설명',
)
서버 업로드
.tar 업로드
- sdist: setup.py 에 설정된 패키지(파일)을 압축함
- register -r internal: 서버에 접속할 수 있는지 확인
- upload -r internal: 패키지(파일) 업로드
.whl 업로드
주의할 점
다른 서버에서 Private PYPI에 있는 패키지 설치하기
pip 를 이용하여 다운로드 받을 경우
$ pip install --trusted-host <pyip 서버 IP> -i <pypi 주소>/simple -r $PATH/requirements.txt
# 예
$ pip install --trusted-host 127.0.0.1 -i http://127.0.0.1:8080/simple imi
$ pip install --trusted-host 127.0.0.1 -i http://127.0.0.1:8080/simple -r $PATH/requirements.txt
easy_install 을 사용하여 다운로드 받을 경우
버전 확인
Adding Thrid Party Packages
미러링된 패키지 업데이트 하기
- https://hub.docker.com/r/codekoala/pypi/ [본문으로]
'Python' 카테고리의 다른 글
[Python3] class property, setter, to_json (0) | 2017.08.07 |
---|---|
[Python] 클래스 메소드와 스태틱 메소드 (Class Method and Static Method) (0) | 2017.01.02 |
[Python3] two list for loop (0) | 2016.11.08 |
[Python] 파이썬 정규식 (0) | 2016.10.27 |
[Python] call by assignment (call by object, call by object reference) (0) | 2016.10.26 |
댓글