Python - poetry(5)依赖规范

简介: Python - poetry(5)依赖规范

啥是依赖规范


可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束

 

版本约束


^ 约束

编写规范 允许的版本范围
^1.2.3 >=1.2.3 <2.0.0
^1.2 >=1.2.0 <2.0.0
^1 >=1.0.0 <2.0.0
^0.2.3 >=0.2.3 <0.3.0
^0.0.3 >=0.0.3 <0.0.4
^0.0 >=0.0.0 <0.1.0
^0 >=0.0.0 <1.0.0
  • 当最左边的数字为非 0,则以左一数字为主版本号,比如:^2.13.0,可以取 2.14.0,但不能取 3.0.0,因为主版本号已经变了
  • 如果左一的数字为 0,则以左二的数字为主版本号,比如:^0.1.0  可以取 0.1.1、0.1.19,但不能取 0.2.0,因为主版本号已经变了

 

~ 约束

编写规范 允许的版本范围
~1.2.3 >=1.2.3 <1.3.0
~1.2 >=1.2.0 <1.3.0
~1 >=1.0.0 <2.0.0

和上面的 ^ 差不多,不过这个是次要版本,以第二个数字为基准

 

* 约束

有点像万能匹配符,写在哪里都可以

编写规范 允许的版本范围
* >=0.0.0
1.* >=1.0.0 <2.0.0
1.2.* >=1.2.0 <1.3.0

 

比较符

就常规的>、< 符号了

>= 1.2.0

> 1

< 2

!= 1.2.3

 

确定的版本号或范围

>= 1.2,< 1.5

 

git 依赖


可以指定依赖项的 git 仓库地址

[tool.poetry.dependencies]

requests = { git = "https://github.com/requests/requests.git" }

默认会拉 git 仓库的 master 分支

 

也可以指定 branch、commit hash、tag

[tool.poetry.dependencies]
# Get the latest revision on the branch named "next"
requests = { git = "https://github.com/kennethreitz/requests.git", branch = "next" }
# Get a revision by its commit hash
flask = { git = "https://github.com/pallets/flask.git", rev = "38eb5d3b" }
# Get a revision by its tag
numpy = { git = "https://github.com/numpy/numpy.git", tag = "v0.13.2" }


路径依赖


如果依赖项位于本地目录,可以用 path

[tool.poetry.dependencies]
# directory
my-package = { path = "../my-package/", develop = false }
# file
my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }


url 依赖


如果依赖远程仓库的文件,可以用 url

[tool.poetry.dependencies]

# directory

my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" }

 

可以通过 poetry add 来添加 url

poetry add https://example.com/my-package-0.1.0.tar.gz

 

Python 限制依赖项


指定仅应该以特定 Python 版本安装依赖项

[tool.poetry.dependencies]

pathlib2 = { version = "^2.2", python = "~2.7" }

 

[tool.poetry.dependencies]

pathlib2 = { version = "^2.2", python = "~2.7 || ^3.2" }

 

多个限制

假设依赖包

  • 版本小于等于 1.9 的时候,只能和 Python 2.7 到 Python 2.9 版本兼容
  • 版本大于 2.0 的时候,只能和 Python 3.4 + 版本兼容

[tool.poetry.dependencies]

foo = [

   {version = "<=1.9", python = "^2.7"},

   {version = "^2.0", python = "^3.4"}

]

 

使用环境限制


感觉比较少用,暂时不展开详解

[tool.poetry.dependencies]

pathlib2 = { version = "^2.2", markers = "python_version ~= '2.7' or sys_platform == 'win32'" }

 

markers 官方文档:https://www.python.org/dev/peps/pep-0508/#environment-markers

 

扩展依赖规范语法


当某个依赖项需要添加很多属性的时候,可读性就很差,如下

[tool.poetry.dev-dependencies]

black = {version = "19.10b0", allow-prereleases = true, python = "^3.6", markers = "platform_python_implementation == 'CPython'"}

 

使用新的语法格式

[tool.poetry.dev-dependencies.black]

version = "19.10b0"

allow-prereleases = true

python = "^3.6"

markers = "platform_python_implementation == 'CPython'"

依赖项的约束完全一样,只不过变成一行一个约束属性,可读性更强

相关文章
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
712 159
|
9月前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
745 1
|
10月前
|
数据处理 开发工具 开发者
requirement.txt 管理python包依赖
在 Python 项目中,`requirements.txt` 用于记录依赖库及其版本,便于环境复现。本文介绍了多种生成该文件的方法:基础方法使用 `pip freeze`,进阶方法使用 `pipreqs`,专业方法使用 `poetry` 或 `pipenv`,以及手动维护方式。每种方法适用不同场景,涵盖从简单导出到复杂依赖管理,并提供常见问题的解决方案,帮助开发者高效生成精准的依赖列表,确保项目环境一致性。
3041 4
|
9月前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
350 0
WK
|
开发者 Python
Python 设计规范
Python的设计规范覆盖了代码布局、命名、注释、函数编写及模块化设计等多个方面,旨在提升代码的可读性与维护性。其中包括缩进、行宽、空行等布局要求;变量、函数、类等命名规则;单行与多行注释说明;函数长度与职责划分;模块的单一职责、开放封闭与依赖倒置原则;避免硬编码并使用有意义的命名;以及遵循PEP 8官方编码标准,以确保代码风格的一致性。遵循这些规范能帮助开发者编写更高质量且易于维护的Python代码。
WK
972 2
|
存储 缓存 文件存储
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
8550 10
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
1033 3

推荐镜像

更多