Poetry vs npm:两个包管理器的迷人相似性

简介: 我们知道 Python 有自己的生态链。Python 版本也非常多,为了处理这么多的版本造成的包问题,Python 有了虚拟环境。在开始之前本文默认对 Python 的生态有了基础的了解(pip 等等)。本文全面介绍了 Python 包管理项目管理,虚拟环境管理工具的 Poetry 的基本用法。对比不同的编程语言对包的管理其实都是相似的,Peotry 的与 npm 极为相似,你掌握其中一个另一个基本也熟悉了。

我们知道 Python 有自己的生态链。Python 版本也非常多,为了处理这么多的版本造成的包问题,Python 有了虚拟环境。在开始之前本文默认对 Python 的生态有了基础的了解(pip 等等)。

一、虚拟环境

1723793826076.jpg

站在前端工程化(Node.js)的角度,简单可以理解为一个项目下的 node_modules 文件夹,是本项目可用的,具有项目隔离特性。


虚拟环境最重要的也就是环境隔离。但是 Python 不会像前端一样项目文件夹上面挂在一个 node_modules 文件夹,而是在特定的文件夹中安装依赖。


但是,一个虚拟环境还不足解决 Python 工程化中面对的问题,例如:

  • 管理项目
  • 包管理
  • 发布包
  • ...

下面我们就盘点一下 Python 的包管理工具 Poetry 的用法。

二、Poetry 简介

1723793850185.jpg

Poetry是一个用于 Python 项目管理的工具,提供依赖管理打包功能Poetry 使用 pyproject.toml 项目配置文件,包含项目的元数据、依赖和工具设置。Poetry 自动生成 虚拟环境 隔离的 Python 环境,避免项目间的依赖冲突。

三、安装与配置

1723793982550.jpg

安装

pip install poetry # pip 安装
curl -sSL https://install.python-poetry.org | python3 - # curl 安装
# 安装之后查看版本
peotry -V
# 如果不是最先的版本可以自更新
pip install --upgrade poetry
poetry self update

配置

-   配置源:`pyproject.toml` 中配置 PyPI 或其他包源。
-   设置环境变量:`POETRY_HOME`,用于指定 Poetry 的安装路径。

配置项目

  • [tool.poetry]:定义项目的基本信息和元数据。
  • [tool.poetry.dependencies]:列出项目运行所需的依赖包及其版本。
  • [tool.poetry.dev-dependencies]:列出开发过程中所需的依赖包及其版本。
  • [tool.poetry.scripts]:定义可通过命令行运行的脚本。
  • [tool.poetry.extras]:定义项目的可选功能及其额外依赖。
  • [build-system]:配置项目构建系统的工具和后端。
  • [tool.poetry.source]:配置额外的包源(例如私有源)。
  • [tool.poetry.http-basic]:配置包源的 HTTP 基本认证信息。

配置示例

[tool.poetry]
name = "simple-docker"
version = "0.1.0"
description = "a simple docker mananger"
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.112.0"
docker = "^7.1.0"
jinja2 = "^3.1.4"
pydantic = "^2.8.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

四、项目管理

1723794029464.jpg

使用 Poetry 作为项目管理可能是日常中使用最多的内容,下面是一些常用关于项目的命令:

创建项目

`poetry new <project-name>`: 创建新项目。
`poetry init`: 初始化现有项目。

项目结构

`pyproject.toml`: 项目配置文件。
`src/`: 源代码目录(可选)。
`tests/`: 测试代码目录。

依赖管理

添加依赖:

`poetry add <package>`: 添加普通依赖。
`poetry add --dev <package>`: 添加开发依赖。

更新依赖:

`poetry update`: 更新所有依赖。
`poetry update <package>`: 更新指定的依赖。

删除依赖:

`poetry remove <package>`: 删除依赖包。

五、虚拟环境

1723794092878.jpg

激活虚拟环境

`poetry shell`: 激活虚拟环境。

运行命令

`poetry run <command>`: 在虚拟环境中运行命令。

六、构建与发布

1723794153806.jpg

构建包

`poetry build`: 生成 `.tar.gz`  `.whl` 文件。

发布包

配置发布源:`pyproject.toml` 中的 `[tool.poetry.source]` 部分。
`poetry publish --username <username> --password <password>`: 发布到 PyPI 或其他源。

七、其他功能

1723794185426.jpg

版本管理

`poetry version <new-version>`: 更新项目版本。

依赖解析

`poetry lock`: 锁定依赖版本,生成 `poetry.lock` 文件。

环境变量

`POETRY_HTTP_BASIC_<source-name>_USERNAME`
`POETRY_HTTP_BASIC_<source-name>_PASSWORD`: 用于配置私有源的认证信息。

八、高级用法

  • 插件: Poetry 支持插件扩展功能。可以通过插件管理工具进行扩展。
  • 自定义脚本:在 pyproject.toml 文件中配置自定义脚本来扩展 Poetry 的功能。

九、常见问题与故障排除

  • 依赖冲突: 检查 pyproject.toml 和 poetry.lock,使用 poetry update 解决版本冲突。
  • 虚拟环境问题: 确保 Poetry 环境路径配置正确,使用 poetry env info 查看虚拟环境信息。

十、小结

本文全面介绍了 Python 包管理项目管理,虚拟环境管理工具的 Poetry 的基本用法。对比不同的编程语言对包的管理其实都是相似的,Peotry 的与 npm 极为相似,你掌握其中一个另一个基本也熟悉了。


作者:编程杂货铺

链接:https://juejin.cn/post/7402055702770401292

相关文章
|
6月前
|
监控 网络协议 Java
下载node-gyp依赖包报错:gyp ERR! find VS msvs_version not set from command line or npm config
就是有一点需要注意,我这里安装vs的时候,可用里面没有vs社区版2017,只有2022,只能安装了2022
|
6月前
|
JavaScript
npm install没问题,但npm run dev的时候报Node Sass version 6.0.1 is incompatible with ^4.0.0 ^5.0.0
npm install没问题,但npm run dev的时候报Node Sass version 6.0.1 is incompatible with ^4.0.0 ^5.0.0
55 0
|
5月前
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
329 3
|
30天前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
31 0
|
6月前
|
资源调度 JavaScript Linux
nvm, node.js, npm, yarn 安装配置
nvm, node.js, npm, yarn 安装配置
287 1
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
该博客文章提供了解决在使用npm版本7.19.1时出现的"no such file or directory"错误的具体方法,建议通过降级npm到6.14.8版本来解决问题,并确认了该方法可以成功安装node_modules。
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
|
3月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
|
3月前
|
JavaScript
【Deepin 20系统】Jupyter notebook解决ValueError: Please install Node.js and npm before continuing installa
文章讨论了在Deepin 20系统上安装Jupyter Notebook的debug插件时出现的"ValueError: Please install Node.js and npm before continuing installation"错误,并提供了使用conda安装Node.js的解决方法。
121 1
|
3月前
Mac卸载 Node npm,升级 Node
Mac卸载 Node npm,升级 Node
66 0