00 개요
- 회사에서 코드분석 하는데 distutils 모듈이 나와서 이에 대해 알아보고자 정리함
- NOTE: Python 3.12에서는 distutils 더 이상 사용 안 함 (removal, depricated)
01 distutils 란
1. 정의
- 'distribution utilities'
- Python 설치 시 추가적인 모듈들을 build 및 install하는 데 도움을 주는 패키지
- 새 모듈들은 100% Python 코드로 작성되었거나, C로 작성되었거나, Python 패키지 모음일 것
02 API Reference
1. distutils.core
- Core Distutils 기능 포함
- distutils.core 모듈만 설치되 Distutils 사용 가능
1) distutils.core.setup()
distutils.core.setup(arguments)
# 예시
setup(name='lsf-pythonapi', # setup(): 파이썬 패키지 구성, 배포하기 위한 함수
version='1.0.6',
description='Python binding for IBM Spectrum LSF APIs',
long_description='Python binding for IBM Spectrum LSF APIs',
license='EPL',
keywords='LSF,Grid,Cluster,HPC',
url='https://github.com/IBMSpectrumComputing/lsf-python-api',
ext_package='pythonlsf',
data_files=[('pythonlsf', ['LICENSE'])],
ext_modules=[Extension('_lsf', ['pythonlsf/lsf.i'], # Extension(): C/C++로 작성된 파이썬 확장 모듈 정의하기 위한 함수
include_dirs=['/usr/include/python2.4', inc_path],
library_dirs=[LSF_LIBDIR],
swig_opts=['-I' + LSF_LIBDIR + '/../../include/lsf/',
# '-DLSF_SIMULATOR',
'-DOS_HAS_THREAD -D_REENTRANT',
gccflag_keyvaluet, gccflag_lsfversion],
extra_compile_args=['-m64', # 64비트 실행 모드 (-m32, -mcpu 등이 있음)
'-I' + LSF_LIBDIR + '/../../include/lsf/',
'-Wno-strict-prototypes', gccflag_keyvaluet,
gccflag_lsfversion,
'-DOS_HAS_THREAD -D_REENTRANT', #For multi-thread lib, lserrno
'-Wp,-U_FORTIFY_SOURCE', #The flag needs -O option. Undefine it for warning.
'-O0'],
extra_link_args=['-m64'],
extra_objects=lsf_static_lib,
libraries=lsf_dynamic_lib)],
py_modules=['pythonlsf.lsf'],
cmdclass = { 'bdist_rpm': bdist_rpm_custom },
classifiers=["Development Status :: 2 - Pre-Alpha",
"License :: OSI Approved :: Eclipse Public License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Internet",
"Topic :: Scientific/Engineering",
"Topic :: Software Development",
"Topic :: System :: Distributed Computing",
"Topic :: Utilities",
],
)
- The basic do-everything function that does most everything you could ever ask for from a Distutils method
- The setup function takes a large number of arguments:
argument | value | type |
name | 패키지 이름 | str |
version | 패키지 버전 | str |
description | 패키지에 관한 설명 한 줄 | str |
long_description | 패키지에 관한 설명 더 길게 | str |
author | 패키지 저자 | str |
author_email | 패키지 저자의. 이메일 | str |
maintainer | 현재 유지하고 있는 자 | str |
maintainer_email | 현재 유지하고 있는 자의 이메일 | str |
url | 패키지의 (홈페이지) url | str |
download_url | 패키지의 다운로드 url | str |
packages | distutils가 조작할 Python 패키지들의 목록 | list of str |
py_modules | distutils가 조작할 Python 모듈들의 목록 | list of str |
scripts | build되고 install될 standalone script 파일들의 목록 | list of str |
ext_modules | build될 Python extension들의 목록 | list of str |
classifiers | 패키지를 위한 classifier 목록* | list of str |
distclass | 사용할 Distribution class | |
script_name | setup.py 스크립트의 이믈 (기본값 sys.argv[0]) | str |
script_args | setup 스크립트에 supply될 arguments | |
options | setup 스크립트의 기본 옵션들 | |
license | 패키지 라이선스 | str |
keywords | Descriptive 메타-데이터 | listof str or comma-separated str |
platforms | ||
cmdclass | Command subclass들의 command 이름들의 매핑 (a mapping of command names to Command subclasses) | dict |
data_files | 설치할 파일들의 데이터를 담음 | lsitlist |
package_dir | directory 이름이랑 매핑되는 패키지 | dict |
- *classifier 종류 - 엄청 많음
- Each project's maintainers provide PyPI with a list of "Trove classifiers" to categorize each release, describing who it's for, what systems it can run on, and how mature it is.
- These standardized classifiers can then be used by community members to find projects based on their desired criteria.
- Instructions for how to add Trove classifiers to a project can be found on the Python Packaging User Guide. To read the original classifier specification, refer to PEP 301.
- To prevent a package from being uploaded to PyPI, use the special "Private :: Do Not Upload" classifier. PyPI will always reject packages with classifiers beginning with "Private ::".
1) distutils.core.Extension
- The Extension class describes a single C/C++ extension module in a setup script
- It accepts the following keyword arguments in its constructor:
argument | value | type |
name | extension의 full name (파일명이나 경로명이 아닌 Python dotted 이름) | str |
sources | C, C++, SWIG (.i) 또는 플랫폼-specific 자원들로 이루어진 소스 파일 이름 목록 | list of str |
include_dirs | C / C++ header file들을 검색할 디렉토리 리스트 | list of str |
library_dirs | link time에 C / C++ 라이브러리들을 검색할 디렉토리 리스트 | list of str |
libraries | list of library names (not filenames or paths) to link against | list of str |
swig_opts | swig 옵션들 | list of str |
extra_compile_args | any extra platform- and compiler-specific information to use when compiling the source files in ‘sources’ For platforms and compilers where a command line makes sense, this is typically a list of command-line arguments, but for other platforms it could be anything. |
list of str |
extra_link_args | any extra platform- and compiler-specific information to use when linking object files together to create the extension (or to create a new static Python interpreter) Similar interpretation as for ‘extra_compile_args’. |
list of str |
extra_objects | list of extra files to link with 예) object files not implied by ‘sources’, static library that must be explicitly specified, binary resource files, etc. |
list of str |
language | extension language (i.e., 'c', 'c++', 'objc') will be detected from the source extensions if not a string procided |
2. distutils.command
- individual distutils command
1) distutils.command.bdist_rpm
- Redhat RPM과 SRPM으로 바이너리 배포를 build
2) distutils.command.bdist_wininst
- Windows installer를 build
3) distutils.command.build_clib
- 패키지 안에 있는 어느 C 라이브러리를 build
4) distutils.command.build_py
- 패키지의 .py/.pyc 파일들을 build
참조
'Python' 카테고리의 다른 글
faulthandler (파이썬 추적 백업 모듈) (0) | 2024.07.05 |
---|---|
@classmethod, @staticmethod (파이썬 매서드 데코레이터) (1) | 2024.07.01 |
클래스, 객체, 속성, 메서드, 생성자, 인스턴스란 (파이썬 용어) (0) | 2024.06.29 |
abc (추상화 클래스) (0) | 2024.06.28 |
ASGI란 (WSGI의 후계자) (0) | 2024.03.28 |