Python Package
- Introduction
- package : directory containing python files
- aim
- packagers for every target system will be able to repackage your work,
- the dependencies you have will themselves be repackaged in every target system
- system dependencies will be clearly described.
`zc.buildout` 이란 걸 이용하는 `Plone` 이란 프로젝트가 나왔으나, OS에 따라서 자동적으로 repackaging 해주지 못함.
그리고 `MathUtils` 라는 프로젝트는 version 이름이 `FumanChu` (자기가 키우던 2번째 개 이름)로 되어 있어서 알아보기 힘듬
- 최근 아키텍쳐
- Distutils를 사용함 => 위에 문제들을 풀기 위해 나온 라이브러리
- Distutils를 베이스로, setuptools, pip, distribute 등이 나옴
- Distutils
- contains command, `setup` function을 사용하여 패키지 함
- commands
- sdist: dist 폴더를 만들고, 그 안에 archive 파일을 넣음
- install: package 를 실행할수 있게 third-part 로 설치함
- upload: online repository 에 package를 올림
- register: metadata 정보를 online repository에 올림
- bdist: binary distribution 만듬
- bdist_msi: msi 파일로 만듬
- flaws
- 모든 `setup.py` 를 설치하는데에서만 사용할 것 이라는 가정
- $ python setup.py --name
Building lxml version 2.2.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c'
needs to be available.
Using build configuration of libxslt 1.1.26
Building against libxml2/libxslt in the following directory: /usr/lib/lxml
- `Distutils` 기능은 개발단에서만 사용할 것이다.
- 많은 롤에 대해서 `setup.py` 가 제대로 동작하지 않을 수도 있다.
- Metadata and pypi
- Metadata: project 를 설명하기 위한 static한 파일, 이미 존재할 경우 오류를 발생 시킨다. https://www.python.org/dev/peps/pep-0314/
- Fields
- Name: 프로젝트 이름
- Version: 프로젝트 버전
- Summary: 프로젝트 요약
- Description: 프로젝트 설명
- Home-Page: 프로젝트 URL
- Author: 프로젝트 작성자 이름
- Classifiers: 프로젝트 상태, e.g) beta, alpha, final
- Requires, Provides, Obsoletes: 의존 관계 있는 module 을 정의할 때 사용
- Pypi (Python Package Index) : a central repository
- register, upload 메소드가 있습니다.
- flaws
- metadata 는 python script를 통해 생성 되기 때문에 , platform 종속적인 metadata file을 만들수 없습니다.
- Architecture of Pypi
- register & upload
- post method 사용, Basic Authentication , Authorization header 사용
- `http://pypi.python.org/simple/
/` 라는 기본 web page 제공 - limitation
- pypi 가 단일 서버라서 다운 될수 있다.
- metadata가 제공되지 않는다.
- Architecture of Python installation
- `python setup.py install` 을 통해 설치 한 경우
- ubuntu: /usr/local/lib/python2.x/dist-packages/
- fedora: /usr/local/lib/python2.x/sites-packages/
- datafiles `project-version.egg-info` 라는 이름으로 module,package 폴더에 존재
- `python setup.py install` 을 통해 설치 한 경우
- Setuptools, pip 가 어떻게 문제를 해결 하기위해 노력했을까?
- The dependency issue
- module-level dependencies => project-level dependencies
- 조금 루즈한 dependency를 사용해서 dependency issue를 해결 함
- The dependency issue
- Improved Standards
- Metadata
- version:
- N.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]
- 1.0a1 < 1.0a2.dev456 < 1.0a2 < 1.0a2.1.dev456
< 1.0a2.1 < 1.0b1.dev456 < 1.0b2 < 1.0b2.post345
< 1.0c1.dev456 < 1.0c1 < 1.0.dev456 < 1.0
< 1.0.post456.dev34 < 1.0.post456
- Dependencies
- Requires, Provides, Obsoletes => Requires-Dist, Providers-Dist, Obsoletes-Dist 로 변경 하고, 여러번 세팅 가능하도록 변경
- version:
- Metadata
- 환경 변수
- Requires-Dist: pywin32 (>1.0); sys.platform == 'win32'
Obsoletes-Dist: pywin31; sys.platform == 'win32'
Requires-Dist: foo (1,!=1.3); platform.machine == 'i386'
Requires-Dist: bar; python_version == '2.4' or python_version == '2.5'
Requires-External: libxslt; 'linux' in sys.platform
- Architecture of Data Files
- `__file__` 을 통해 package 에 있는 config 파일 읽을수 있도록 지원, pkgutil 을 통해 metadata 의 `RESOURCES' 에서 map형태로 사용가능하도록 지원
- 환경 변수도 사용 가능
- [files]
resources =
config/mopy.cfg {confdir}/{application.name}/
images/*.jpg {datadir}/{application.name}/
- 환경 변수도 사용 가능
- Pypi Improvenments
댓글 없음:
댓글 쓰기