Search
Search Icon Icon to open search Python Project package PyPi에 올리기 Last updated
Mar 19, 2023
# pip 설치1
python3 -m pip install --upgrade pip
1
py -m pip install --upgrade pip
# Project 생성간단한 프로젝트 packaging_tutorial
다음과 같은 구성으로 준비한다.
1
2
3
4
5
packaging_tutorial/
└── src/
└── example_package_cheese/
├── __init__.py
└── example.py
example_package_cheese
: project 명과 동일하게 해주는 것이 좋다. 설정도 더 간편하고 패키지사용자 입장에서도 구분하기 좋다.__init__.py
: 비어있는 파일. directory 자체를 package로 import 하기 위해 필요.example.py
: 실제 로직이 담길 파일. 아래와 같이 실제 로직을 추가해준다.1
2
def add_one(number):
return number + 1
# Package Files 생성1
2
3
4
5
6
7
8
9
packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│ └── example_package_YOUR_USERNAME_HERE/
│ ├── __init__.py
│ └── example.py
└── tests/
pyproject.toml
: 프로젝트 빌드 시스템 요구 사항과 정보를 담고 있는 파일 1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Hatchlling
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
# setuptools
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
# filt
[build-system]
requires = ["flit_core>=3.4"]
build-backend = "flit_core.buildapi"
requires
: 패키지를 빌드하는데 필요한 패키지 목록.pip 와 같은 빌드 프론트엔드들에서 자동으로 격리된 virtual enviroment에서 임시로 설치하여 빌드에 사용되기 때문에 따로 설치할 필요는 없다. build-backend
: 빌드 프론트엔드에서 빌드할때 사용하는 Python 객체명 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[ project ]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name = "Example Author" , email = "author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3" ,
"License :: OSI Approved :: MIT License" ,
"Operating System :: OS Independent" ,
]
[ project . urls ]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"
name
: 패키지의 이름. PyPI에 이미 올라와 있는 이름과 겹칠 수 없다.version
: 패키지의 버전.
version spec authors
: 작성자. maintainers
도 동일한 모양으로 작성할 수 있다.readme
: 패키지 readme 파일 pathrequires-python
: 필요 python 버전 명시classifiers
: 추가적인 메타데이터. 호환 python 버전, 라이센스, OS 등.
PyPi classifier 목록 [project]
에 사용할 수 있는 더 많은 메타데이터들은
project metadata specification 에서 확인 할 수 있다.이외에도 keyword
를 통해 사용자들이 더 찾기 쉽게 키워드를 등록할 수도 있고, dependencies
를 이용하여 패키지에 필요한 dependecies들도 관리 할 수 있다. # 패키지 빌드하기pip build를 위하여 PyPA build 설치
1
2
3
4
5
# Unix/mac OS
py -m pip install --upgrade build
# Windows
python3 -m pip install --upgrade build
위에 작성한 pyproject.toml
파일 위치에서 아래 커맨드로 빌드하기
1
2
3
4
5
# Unix/mac OS
python3 -m build
# Windows
py -m build
빌드하고 나면 아래와 같이 /dist
directory가 생성된다.
1
2
3
dist/
├── example_package_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl
└── example_package_YOUR_USERNAME_HERE-0.0.1.tar.gz
# 패키지 업로드하기테스트 업로드를 하기 위해 TestPyPI 계정 만들기 업로드 하기 위하여
twine 을 먼저 설치
1
2
3
4
5
# Unix/macOS
python3 -m pip install --upgrade twine
# Windows
py -m pip install --upgrade twine
twine 이용하여 아래와 같이 업로드 할 수 있다.
1
2
3
4
5
# Unix/macOS
python3 -m twine upload --repository testpypi dist/*
# Windows
py -m twine upload --repository testpypi dist/*
이 과정에서 username과 password를 입력하도록 되어있는데,
username : __token__
password : 위에서 발급받은 API Token(pypi-blahblah
)을 입력
위 업로드가 성공하면 https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE
. 에서 올라간 패키지를 확인할 수 있다. 예시 :
https://test.pypi.org/project/cheese-package/0.1.0/
# 패키지 설치하기1
2
3
4
5
# Unix/macOS
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
# Windows
py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
--index-url
: 라이브 되고 있는 PyPI 라이브러리가 아닌 TestPyPI의 라이브러리를 설치시 사용--no-deps
: 만약 동일한 이름의 라이브러리가 라이브 PyPI에 있는 경우, dependency 설치에 실패하거나 예상치 못한 다른 dependecy가 깔릴 수 있으므로.1
2
3
from example_package_YOUR_USERNAME_HERE import example
example . add_one ( 2 )
# pypi.org 에 업로드하기[https://pypi.org] 계정만들기 twine upload dist/*
로 업로드하기 (이때, 라이브 PyPI로 올리는거니 --repository
따로 명시 필요 없음)패키지 설치시에는 python -m pip install [your-package]
로 설치 # References