의존성 관리¶
의존성 테이블¶
프로젝트의 의존성은 여러 테이블에 정의된다:
project.dependencies
: 공개된 의존성project.optional-dependencies
: 공개된 선택적 의존성 또는 "추가 기능"dependency-groups
: 개발을 위한 로컬 의존성tool.uv.sources
: 개발 중 의존성을 위한 대체 소스
참고
project.dependencies
와 project.optional-dependencies
테이블은 프로젝트가 공개되지 않더라도 사용할 수 있다. dependency-groups
는 최근에 표준화된 기능이므로 아직 모든 도구에서 지원되지 않을 수 있다.
uv는 uv add
와 uv remove
명령어를 통해 프로젝트의 의존성을 수정할 수 있지만, pyproject.toml
파일을 직접 편집해도 의존성 메타데이터를 업데이트할 수 있다.
의존성 추가하기¶
의존성을 추가하려면 다음 명령어를 사용한다:
$ uv add httpx
project.dependencies
테이블에 항목이 추가된다:
[project]
name = "example"
version = "0.1.0"
dependencies = ["httpx>=0.27.2"]
--dev
, --group
, 또는
--optional
플래그를 사용해 다른 테이블에 의존성을 추가할 수 있다.
의존성에는 패키지의 최신 호환 버전을 위한 제약 조건(예: >=0.27.2
)이 포함된다. 다른 제약 조건을 지정할 수도 있다:
$ uv add "httpx>=0.20"
패키지 레지스트리가 아닌 다른 소스에서 의존성을 추가하면, uv는 소스 테이블에 항목을 추가한다. 예를 들어 GitHub에서 httpx
를 추가할 경우:
$ uv add "httpx @ git+https://github.com/encode/httpx"
pyproject.toml
에는 Git 소스 항목이 포함된다:
[project]
name = "example"
version = "0.1.0"
dependencies = [
"httpx",
]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx" }
의존성을 사용할 수 없는 경우 uv는 오류를 표시한다:
$ uv add "httpx>9999"
× No solution found when resolving dependencies:
╰─▶ Because only httpx<=1.0.0b0 is available and your project depends on httpx>9999,
we can conclude that your project's requirements are unsatisfiable.
의존성 임포트¶
requirements.txt
파일에 선언된 의존성은 -r
옵션을 사용해 프로젝트에 추가할 수 있다:
uv add -r requirements.txt
의존성 제거 방법¶
의존성을 제거하려면 다음 명령어를 사용한다:
$ uv remove httpx
--dev
, --group
, --optional
플래그를 사용하면 특정 테이블에서 의존성을 제거할 수 있다.
제거하려는 의존성에 대해 소스가 정의되어 있고, 해당 의존성을 참조하는 다른 항목이 없다면 소스도 함께 제거된다.
의존성 변경¶
기존 의존성을 변경하려면, 예를 들어 httpx
에 대해 다른 제약 조건을 사용하려면 다음과 같이 한다:
$ uv add "httpx>0.1.0"
참고
이 예제에서는 pyproject.toml
파일에 있는 의존성의 제약 조건을 변경한다.
의존성의 잠긴 버전은 새로운 제약 조건을 충족하기 위해 필요한 경우에만 변경된다.
제약 조건 내에서 최신 패키지 버전으로 강제 업데이트하려면 --upgrade-package <name>
을 사용한다. 예를 들어:
$ uv add "httpx>0.1.0" --upgrade-package httpx
패키지 업그레이드에 대한 자세한 내용은 lockfile 문서를 참고한다.
다른 의존성 소스를 요청하면 tool.uv.sources
테이블이 업데이트된다. 예를 들어 개발 중에 로컬 경로에서 httpx
를 사용하려면 다음과 같이 한다:
$ uv add "httpx @ ../httpx"
플랫폼별 의존성¶
특정 플랫폼이나 특정 Python 버전에서만 의존성을 설치하려면 환경 마커를 사용한다.
예를 들어, Linux에서만 jax
를 설치하고 Windows나 macOS에서는 설치하지 않으려면 다음과 같이 입력한다:
$ uv add "jax; sys_platform == 'linux'"
그러면 pyproject.toml
파일에 환경 마커가 포함된 의존성 정의가 추가된다:
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = ["jax; sys_platform == 'linux'"]
마찬가지로, Python 3.11 이상에서만 numpy
를 포함하려면 다음과 같이 입력한다:
$ uv add "numpy; python_version >= '3.11'"
사용 가능한 마커와 연산자의 전체 목록은 Python의 환경 마커 문서를 참고한다.
Tip
의존성 소스를 플랫폼별로 변경할 수도 있다.
프로젝트 의존성¶
project.dependencies
테이블은 PyPI에 업로드하거나 휠을 빌드할 때 사용되는 의존성을 나타낸다. 각 의존성은 의존성 명세자 구문을 사용하여 지정되며, 이 테이블은 PEP 621 표준을 따른다.
project.dependencies
는 프로젝트에 필요한 패키지 목록과 설치 시 사용해야 하는 버전 제약 조건을 정의한다. 각 항목은 의존성 이름과 버전을 포함한다. 항목에는 플랫폼별 패키지를 위한 추가 기능이나 환경 마커가 포함될 수도 있다. 예를 들면 다음과 같다:
[project]
name = "albatross"
version = "0.1.0"
dependencies = [
# 이 범위 내의 모든 버전
"tqdm >=4.66.2,<5",
# 정확히 이 버전의 torch
"torch ==2.2.2",
# torch 추가 기능과 함께 transformers 설치
"transformers[torch] >=4.39.3,<5",
# 오래된 파이썬 버전에서만 이 패키지 설치
# "환경 마커" 섹션에서 더 많은 정보 확인
"importlib_metadata >=7.1.0,<8; python_version < '3.10'",
"mollymawk ==0.1.0"
]
의존성 소스¶
tool.uv.sources
테이블은 표준 의존성 테이블을 확장해 개발 중에 사용할 수 있는 대체 의존성 소스를 제공한다.
의존성 소스는 project.dependencies
표준에서 지원하지 않는 편집 가능한 설치나 상대 경로와 같은 일반적인 패턴을 지원한다. 예를 들어, 프로젝트 루트를 기준으로 상대 경로에 있는 디렉터리에서 foo
를 설치하려면 다음과 같이 설정한다:
[project]
name = "example"
version = "0.1.0"
dependencies = ["foo"]
[tool.uv.sources]
foo = { path = "./packages/foo" }
uv에서 지원하는 의존성 소스는 다음과 같다:
- 인덱스: 특정 패키지 인덱스에서 해결된 패키지.
- Git: Git 저장소.
- URL: 원격 wheel 또는 소스 배포판.
- 경로: 로컬 wheel, 소스 배포판 또는 프로젝트 디렉터리.
- 워크스페이스: 현재 워크스페이스의 멤버.
중요
소스는 uv에서만 적용된다. 다른 도구를 사용하면 표준 프로젝트 테이블에 정의된 내용만 사용된다. 개발에 다른 도구를 사용하는 경우, 소스 테이블에 제공된 메타데이터는 해당 도구의 형식으로 다시 지정해야 한다.
인덱스¶
특정 인덱스에서 Python 패키지를 추가하려면 --index
옵션을 사용한다:
$ uv add torch --index pytorch=https://download.pytorch.org/whl/cpu
uv는 인덱스를 [[tool.uv.index]]
에 저장하고 [tool.uv.sources]
항목을 추가한다:
[project]
dependencies = ["torch"]
[tool.uv.sources]
torch = { index = "pytorch" }
[[tool.uv.index]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"
Tip
위 예제는 PyTorch 인덱스의 특성상 x86-64 Linux에서만 동작한다. PyTorch 설정에 대한 자세한 내용은 PyTorch 가이드를 참고한다.
index
소스를 사용하면 특정 패키지를 해당 인덱스에 고정시킨다. 즉, 다른 인덱스에서 다운로드하지 않는다.
인덱스를 정의할 때 explicit
플래그를 포함하면, tool.uv.sources
에서 명시적으로 지정한 패키지에만 해당 인덱스를 사용한다. explicit
을 설정하지 않으면, 다른 곳에서 찾을 수 없는 패키지가 해당 인덱스에서 해결될 수 있다.
[[tool.uv.index]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
Git¶
Git 의존성 소스를 추가하려면, git clone
에 사용할 수 있는 Git 호환 URL 앞에 git+
를 붙인다.
예를 들어:
$ uv add git+https://github.com/encode/httpx
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx" }
특정 Git 참조를 요청할 수도 있다. 예를 들어, 태그:
$ uv add git+https://github.com/encode/httpx --tag 0.27.0
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx", tag = "0.27.0" }
또는 브랜치:
$ uv add git+https://github.com/encode/httpx --branch main
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx", branch = "main" }
또는 리비전(커밋):
$ uv add git+https://github.com/encode/httpx --rev 326b9431c761e1ef1e00b9f760d1f654c8db48c6
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx", rev = "326b9431c761e1ef1e00b9f760d1f654c8db48c6" }
패키지가 저장소 루트에 있지 않다면 subdirectory
를 지정할 수 있다:
$ uv add git+https://github.com/langchain-ai/langchain#subdirectory=libs/langchain
[project]
dependencies = ["langchain"]
[tool.uv.sources]
langchain = { git = "https://github.com/langchain-ai/langchain", subdirectory = "libs/langchain" }
URL¶
URL 소스를 추가하려면 .whl
로 끝나는 휠 파일이나 .tar.gz
또는 .zip
로 끝나는 소스 배포 파일에 대한 https://
URL을 제공한다. 지원되는 모든 형식은 여기에서 확인할 수 있다.
예를 들어:
$ uv add "https://files.pythonhosted.org/packages/5c/2d/3da5bdf4408b8b2800061c339f240c1802f2e82d55e50bd39c5a881f47f0/httpx-0.27.0.tar.gz"
이 명령은 다음과 같이 pyproject.toml
파일을 생성한다:
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { url = "https://files.pythonhosted.org/packages/5c/2d/3da5bdf4408b8b2800061c339f240c1802f2e82d55e50bd39c5a881f47f0/httpx-0.27.0.tar.gz" }
URL 의존성은 pyproject.toml
파일에서 { url = <url> }
구문을 사용해 직접 추가하거나 수정할 수도 있다. 소스 배포 파일이 아카이브 루트에 있지 않은 경우 subdirectory
를 지정할 수 있다.
경로¶
경로 소스를 추가하려면 휠 파일(확장자가 .whl
로 끝나는 파일), 소스 배포판(일반적으로 .tar.gz
또는 .zip
으로 끝나는 파일; 지원되는 모든 형식은 여기를 참조), 또는 pyproject.toml
파일이 포함된 디렉터리의 경로를 제공한다.
예를 들어:
$ uv add /example/foo-0.1.0-py3-none-any.whl
이 명령은 다음과 같은 pyproject.toml
파일을 생성한다:
[project]
dependencies = ["foo"]
[tool.uv.sources]
foo = { path = "/example/foo-0.1.0-py3-none-any.whl" }
경로는 상대 경로일 수도 있다:
$ uv add ./foo-0.1.0-py3-none-any.whl
또는 프로젝트 디렉터리의 경로일 수도 있다:
$ uv add ~/projects/bar/
중요
기본적으로 경로 의존성에 대해 편집 가능한 설치를 사용하지 않는다. 프로젝트 디렉터리에 대해 편집 가능한 설치를 요청할 수 있다:
$ uv add --editable ~/projects/bar/
동일한 저장소에 여러 패키지가 있는 경우, 워크스페이스가 더 적합할 수 있다.
워크스페이스 멤버¶
워크스페이스 멤버에 대한 의존성을 선언하려면 멤버 이름에 { workspace = true }
를 추가한다. 모든 워크스페이스 멤버는 명시적으로 선언해야 한다. 워크스페이스 멤버는 항상 편집 가능 상태다. 워크스페이스에 대한 자세한 내용은 워크스페이스 문서를 참고한다.
[project]
dependencies = ["foo==0.1.0"]
[tool.uv.sources]
foo = { workspace = true }
[tool.uv.workspace]
members = [
"packages/foo"
]
플랫폼별 소스 설정¶
특정 플랫폼이나 Python 버전에 한정된 소스를 사용하려면, 의존성 명세와 호환되는 환경 마커를 소스에 제공하면 된다.
예를 들어, httpx
를 GitHub에서 가져오되 macOS에서만 사용하려면 다음과 같이 설정한다:
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = { git = "https://github.com/encode/httpx", tag = "0.27.2", marker = "sys_platform == 'darwin'" }
소스에 마커를 지정하면, uv는 모든 플랫폼에서 httpx
를 포함하지만, macOS에서는 GitHub에서 소스를 다운로드하고, 다른 플랫폼에서는 PyPI를 사용한다.
여러 소스 지정¶
단일 의존성에 대해 여러 소스를 지정할 수 있다. 이때 PEP 508과 호환되는 환경 마커를 사용해 소스를 구분한다.
예를 들어, macOS와 Linux에서 각기 다른 httpx
태그를 가져오려면 다음과 같이 설정한다:
[project]
dependencies = ["httpx"]
[tool.uv.sources]
httpx = [
{ git = "https://github.com/encode/httpx", tag = "0.27.2", marker = "sys_platform == 'darwin'" },
{ git = "https://github.com/encode/httpx", tag = "0.24.1", marker = "sys_platform == 'linux'" },
]
이 전략은 환경 마커를 기반으로 다른 인덱스를 사용하는 경우에도 적용된다. 예를 들어, 플랫폼에 따라 다른 PyTorch 인덱스에서 torch
를 설치하려면 다음과 같이 설정한다:
[project]
dependencies = ["torch"]
[tool.uv.sources]
torch = [
{ index = "torch-cpu", marker = "platform_system == 'Darwin'"},
{ index = "torch-gpu", marker = "platform_system == 'Linux'"},
]
[[tool.uv.index]]
name = "torch-cpu"
url = "https://download.pytorch.org/whl/cpu"
[[tool.uv.index]]
name = "torch-gpu"
url = "https://download.pytorch.org/whl/cu124"
소스 비활성화¶
uv가 tool.uv.sources
테이블을 무시하도록 하려면 (예: 패키지의 공개된 메타데이터로 해결하는 상황을 시뮬레이션할 때), --no-sources
플래그를 사용한다:
$ uv lock --no-sources
--no-sources
를 사용하면 uv가 특정 의존성을 충족시킬 수 있는 워크스페이스 멤버를 발견하지 못하게 된다.
선택적 의존성¶
라이브러리로 배포되는 프로젝트에서는 기본 의존성 트리를 줄이기 위해 일부 기능을 선택적으로 제공하는 것이 일반적이다. 예를 들어, Pandas는 excel
추가 기능과 plot
추가 기능을 제공한다. 이를 통해 사용자가 명시적으로 요청하지 않는 한 Excel 파서나 matplotlib
가 설치되지 않는다. 추가 기능은 package[<extra>]
구문으로 요청할 수 있다. 예를 들어 pandas[plot, excel]
과 같이 사용한다.
선택적 의존성은 [project.optional-dependencies]
에 지정한다. 이 TOML 테이블은 추가 기능 이름을 해당 의존성에 매핑하며, 의존성 지정자 구문을 따른다.
선택적 의존성도 일반 의존성과 마찬가지로 tool.uv.sources
에 항목을 추가할 수 있다.
[project]
name = "pandas"
version = "1.0.0"
[project.optional-dependencies]
plot = [
"matplotlib>=3.6.3"
]
excel = [
"odfpy>=1.4.1",
"openpyxl>=3.1.0",
"python-calamine>=0.1.7",
"pyxlsb>=1.0.10",
"xlrd>=2.0.1",
"xlsxwriter>=3.0.5"
]
선택적 의존성을 추가하려면 --optional <extra>
옵션을 사용한다:
$ uv add httpx --optional network
Note
선택적 의존성이 서로 충돌하는 경우, 명시적으로 충돌하는 의존성으로 선언하지 않으면 해결에 실패한다.
특정 선택적 의존성에만 적용되는 소스를 선언할 수도 있다. 예를 들어, 선택적 cpu
또는 gpu
추가 기능에 따라 다른 PyTorch 인덱스에서 torch
를 가져오는 경우:
[project]
dependencies = []
[project.optional-dependencies]
cpu = [
"torch",
]
gpu = [
"torch",
]
[tool.uv.sources]
torch = [
{ index = "torch-cpu", extra = "cpu" },
{ index = "torch-gpu", extra = "gpu" },
]
[[tool.uv.index]]
name = "torch-cpu"
url = "https://download.pytorch.org/whl/cpu"
[[tool.uv.index]]
name = "torch-gpu"
url = "https://download.pytorch.org/whl/cu124"
개발 의존성¶
선택적 의존성과 달리, 개발 의존성은 로컬에서만 사용되며 PyPI나 다른 인덱스에 프로젝트를 게시할 때 요구 사항에 포함되지 않는다. 따라서 개발 의존성은 [project]
테이블에 포함되지 않는다.
개발 의존성도 일반 의존성과 마찬가지로 tool.uv.sources
에 항목을 추가할 수 있다.
개발 의존성을 추가하려면 --dev
플래그를 사용한다:
$ uv add --dev pytest
uv는 PEP 735에 정의된 대로 [dependency-groups]
테이블을 사용해 개발 의존성을 선언한다. 위 명령어는 dev
그룹을 생성한다:
[dependency-groups]
dev = [
"pytest >=8.1.1,<9"
]
dev
그룹은 특별히 취급된다. 이 그룹의 의존성을 포함하거나 제외하려면 --dev
, --only-dev
, --no-dev
플래그를 사용한다. 모든 기본 그룹을 비활성화하려면 --no-default-groups
를 참고한다. 또한 dev
그룹은 기본적으로 동기화된다.
의존성 그룹¶
개발 의존성을 --group
플래그를 사용해 여러 그룹으로 나눌 수 있다.
예를 들어 lint
그룹에 개발 의존성을 추가하려면 다음과 같이 입력한다:
$ uv add --group lint ruff
이 명령어는 pyproject.toml
파일에 다음과 같은 [dependency-groups]
정의를 추가한다:
[dependency-groups]
dev = [
"pytest"
]
lint = [
"ruff"
]
그룹을 정의한 후에는 --all-groups
, --no-default-groups
, --group
, --only-group
, 그리고 --no-group
옵션을 사용해 해당 의존성을 포함하거나 제외할 수 있다.
Tip
--dev
, --only-dev
, --no-dev
플래그는 각각 --group dev
, --only-group dev
, --no-group dev
와 동일하다.
uv는 모든 의존성 그룹이 서로 호환되도록 요구하며, lockfile을 생성할 때 모든 그룹을 함께 해결한다.
한 그룹에 선언된 의존성이 다른 그룹과 호환되지 않으면, uv는 프로젝트의 요구 사항을 해결하지 못하고 오류를 발생시킨다.
Note
서로 충돌하는 의존성 그룹이 있다면, 명시적으로 충돌하는 의존성으로 선언하지 않는 한 해결에 실패한다.
기본 그룹 설정¶
기본적으로 uv
는 환경에서 dev
의존성 그룹을 포함한다(예: uv run
또는 uv sync
실행 시). 포함할 기본 그룹은 tool.uv.default-groups
설정을 통해 변경할 수 있다.
[tool.uv]
default-groups = ["dev", "foo"]
Tip
uv run
또는 uv sync
실행 시 이 동작을 비활성화하려면 --no-default-groups
를 사용한다. 특정 기본 그룹을 제외하려면 --no-group <name>
을 사용한다.
레거시 dev-dependencies
¶
[dependency-groups]
가 표준화되기 전에는 uv가 tool.uv.dev-dependencies
필드를 사용해 개발 의존성을 지정했다. 예를 들면 다음과 같다:
[tool.uv]
dev-dependencies = [
"pytest"
]
이 섹션에 선언된 의존성은 dependency-groups.dev
의 내용과 결합된다. 결국 dev-dependencies
필드는 더 이상 사용되지 않고 제거될 예정이다.
Note
tool.uv.dev-dependencies
필드가 존재하면, uv add --dev
는 새로운 dependency-groups.dev
섹션을 추가하는 대신 기존 섹션을 사용한다.
빌드 의존성¶
프로젝트가 파이썬 패키지로 구성된 경우, 프로젝트를 빌드하는 데 필요하지만 실행에는 필요하지 않은 의존성을 선언할 수 있다. 이러한 의존성은 PEP 518에 따라 [build-system]
테이블의 build-system.requires
아래에 지정된다.
예를 들어, 프로젝트가 setuptools
를 빌드 백엔드로 사용한다면, setuptools
를 빌드 의존성으로 선언해야 한다:
[project]
name = "pandas"
version = "0.1.0"
[build-system]
requires = ["setuptools>=42"]
build-backend = "setuptools.build_meta"
기본적으로 uv는 빌드 의존성을 해결할 때 tool.uv.sources
를 존중한다. 예를 들어, 빌드에 setuptools
의 로컬 버전을 사용하려면 tool.uv.sources
에 소스를 추가한다:
[project]
name = "pandas"
version = "0.1.0"
[build-system]
requires = ["setuptools>=42"]
build-backend = "setuptools.build_meta"
[tool.uv.sources]
setuptools = { path = "./packages/setuptools" }
패키지를 배포할 때는 uv build --no-sources
를 실행하여 tool.uv.sources
가 비활성화된 상태에서도 패키지가 올바르게 빌드되는지 확인하는 것을 권장한다. 이는 pypa/build
와 같은 다른 빌드 도구를 사용할 때와 동일한 상황이다.
편집 가능한 의존성¶
일반적으로 Python 패키지가 포함된 디렉토리를 설치할 때, 먼저 wheel을 빌드한 다음 해당 wheel을 가상 환경에 설치한다. 이때 모든 소스 파일이 복사된다. 패키지 소스 파일을 수정하면, 가상 환경에는 이전 버전의 파일이 남아 있게 된다.
편집 가능한 설치 방식은 이 문제를 해결한다. 가상 환경 내에 프로젝트에 대한 링크(.pth
파일)를 추가하여 인터프리터가 소스 파일을 직접 포함하도록 지시한다.
편집 가능한 설치에는 몇 가지 제한이 있다(주로: 빌드 백엔드가 이를 지원해야 하며, 네이티브 모듈은 임포트 전에 재컴파일되지 않음). 하지만 개발 과정에서 유용하게 사용할 수 있다. 가상 환경이 항상 패키지의 최신 변경 사항을 반영하기 때문이다.
uv는 기본적으로 워크스페이스 패키지에 대해 편집 가능한 설치를 사용한다.
편집 가능한 의존성을 추가하려면 --editable
플래그를 사용한다:
$ uv add --editable ./path/foo
또는 워크스페이스에서 편집 가능한 의존성을 사용하지 않으려면 다음과 같이 입력한다:
$ uv add --no-editable ./path/foo
의존성 명세 (PEP 508)¶
uv는 의존성 명세를 사용하며, 이는 이전에 PEP 508로 알려진 방식이다. 의존성 명세는 다음과 같은 순서로 구성된다:
- 의존성 이름
- 필요한 추가 기능 (선택 사항)
- 버전 명세
- 환경 마커 (선택 사항)
버전 명세는 쉼표로 구분되어 함께 추가된다. 예를 들어, foo >=1.2.3,<2,!=1.4.0
는 "1.2.3 이상이지만 2 미만이고, 1.4.0이 아닌 foo
버전"으로 해석된다.
필요한 경우 명세는 후행 0으로 채워진다. 따라서 foo ==2
는 foo 2.0.0과도 일치한다.
등호와 함께 별표를 마지막 자리에 사용할 수 있다. 예를 들어, foo ==2.1.*
은 2.1 시리즈의 모든 릴리스를 허용한다. 마찬가지로, ~=
는 마지막 자리가 같거나 높은 경우를 일치시킨다. 예를 들어, foo ~=1.2
는 foo >=1.2,<2
와 같고, foo ~=1.2.3
는 foo >=1.2.3,<1.3
과 같다.
추가 기능은 이름과 버전 사이의 대괄호 안에 쉼표로 구분되어 표기된다. 예를 들어, pandas[excel,plot] ==2.2
와 같다. 추가 기능 이름 사이의 공백은 무시된다.
일부 의존성은 특정 환경에서만 필요하다. 예를 들어, 특정 Python 버전이나 운영체제가 있다. importlib.metadata
모듈을 위한 importlib-metadata
백포트를 설치하려면 importlib-metadata >=7.1.0,<8; python_version < '3.10'
를 사용한다. Windows에서 colorama
를 설치하려면 colorama >=0.4.6,<5; platform_system == "Windows"
를 사용한다.
마커는 and
, or
, 그리고 괄호로 결합된다. 예를 들어, aiohttp >=3.7.4,<4; (sys_platform != 'win32' or implementation_name != 'pypy') and python_version >= '3.10'
와 같다. 마커 내의 버전은 따옴표로 묶어야 하지만, 마커 외부의 버전은 따옴표로 묶지 않아야 한다.