Linux下学习Python包管理器Poetry教程 零基础入门到精通

Poetry

[官网 - Poetry] https://python-poetry.org/

安装

pip install poetry

简单使用

初始化 poetry 项目

cd ~ && mkdir demo
poetry init

管理虚拟环境

poetry 预设了很多自己的虚拟环境配置,这些配置可以通过 poetry config 进行修改

当用户在执行 poetry add 等指令时,poetry 都会自动检查当下是否正在使用虚拟环境:

  • 如果是,则会直接安装模块到当前的虚拟环境下
  • 如果否,则会自动帮你创建一个新的虚拟环境,然后再安装模块

创建虚拟环境 (Linux 默认在 ~/.cache/pypoetry/)

# 虚拟环境的命名模式为 项目名-随机数-python版本
cd demo
poetry env use python
# 输出 Using virtualenv: /home/yin/.cache/pypoetry/virtualenvs/demo-NLZ_vRHG-py3.11

在当前项目创建虚拟环境

# 查看 poetry 的几个主要设定
poetry config --list
# 更改设置
poetry config virtualenvs.in-project true
# 先把之前创建的虚拟环境删除
poetry env remove python
# 重新创建虚拟环境
poetry env use python
# 输出 Using virtualenv: ~/demo/.venv

启动与退出虚拟环境

在项目目录下使用 poetry shell 就可以进入到虚拟环境

poetry shell 指令会检查当前目录或上层目录是否存在 pyproject.toml 来确定需要启动的虚拟环境

退出虚拟环境输入 exit

Poetry 指令

安装

poetry add

相较于 pip install , 例如使用命令 poetry add flask , poetry 会将全部信息列出来(flask 及其依赖)。

同时项目中的 pyproject.toml 会新增 flask = "^2.3.2" , 而 flask 的其余依赖不会出现在 toml 文件中。

这里是一个非常大的优点, 以便区分那些是用户安装的第三方模块, 那些是第三方模块一并安装的依赖。

poetry.lock 与更新顺序

除了更新 pyproject.toml , 此时项目中还会新增一个文件, 名为 poetry.lock , 它实际上就相当于 piprequirements.txt , 详细记录了所有安装的模块与版本。

当使用 poetry add 指令时, poetry 会自动依序帮你做完这三件事:

  1. 更新 pyproject.toml
  2. 依照 pyproject.toml 的内容,更新 poetry.lock
  3. 依照 poetry.lock 的内容,更新虚拟环境

由此可见, poetry.lock 的内容是取决于 pyproject.toml , 但两者并不会自己连动, 一定要基于特定指令才会进行同步与更新, poetry add 就是一个典型案例。

poetry lock :更新 poetry.lock

档自行修改了 pyproject.toml 内容, 此时 poetry.lock 的内容与 pyproject.toml 出现了脱钩., 必须让它依照新的 pyproject.toml 内容更新、同步, 使用指令

poetry lock

虚拟环境如果要重新建立, 是基于 poetry.lock 的内容来安装模块, 而非 pyproject.toml

但要特别注意的是, poetry lock 指令,仅会更新 poetry.lock ,不会同时安装模块至虚拟环境

因此,在执行完 poetry lock 指令后,必须再使用 poetry install 来安装模块。否则就会出现 poetry.lock 和虚拟环境不一致的状况。

更多 poetry lock 细节可参考 官方文件,其中特别值得注意的是 --no-update 参数

新增模块至 dev-dependencies

有些模块, 比如 pytestblack 等等, 只会在开发环境中使用, 产品的部署环境并不需要。

Poetry 允许你区分这两者,将上述的模块安装至 dev-dependencies 区块,方便让你轻松建立一份「不包含」 dev-dependencies 开发模块的安装清单。

在此以 Black 为例,安装方式如下:

poetry add black --group dev

结果的区别显示在 pyproject.toml 里:

[tool.poetry.dependencies]
python = "^3.10"
flask = "^2.3.2"[tool.poetry.group.dev.dependencies]
black = "^23.7.0"

可以看到 black 被列在不同区块: tool.poetry.dev-dependencies

强烈建议善用 dev-dependencies

善用 --group dev 参数,明确区分开发环境,我认为非常必要。

Poetry 更新模块

使用 poetry update 更新所有模块

使用 poetry update requests toml 更新指定模块

注意 : 关于模块版本的升级限制规则,取决于你在 pyproject.toml 中的设定

列出全部模块清单

使用 poetry show

注意 : 这里的清单内容并不是来自于虚拟环境, 而是来自于 poetry.lock 的内容, 不一定和虚拟环境中的一样, 比如你使用了 pip install 指令安装模块, 就不会记载在 poetry.lock 中, 那 poetry show 自然也不会显示。

树状显示模块依赖层级

poetry show --tree

也可以只显示指定模块的依赖层级, 以 celery 为例:

poetry show celery --tree

Poetry 移除模块

使用 poetry remove 指令。和 poetry add 一样,可以加上 -D 参数来移除置于开发区的模块。

前面已经提过, pip uninstall 只会移除你所指定的模块, 而不会连同依赖模块一起移除, 这就是Poetry的优点

输出 dev-dependencies

因为 poetry export 预设只会输出 toml 中的 [tool.poetry.dependencies] 区块的模块!还记得上面我们把 Black 安装到 [tool.poetry.dev-dependencies] 了吗?

基于需求,必须输出 [tool.poetry.dev-dependencies] 的模块,才能看到 Black。

加上 --dev 参数即可:

poetry export -f requirements.txt -o requirements.txt --without-hashes --dev

输出的 requirements.txt 内容:

black==22.3.0; python_full_version >= "3.6.2"
click==8.1.2; python_version >= "3.7" and python_full_version >= "3.6.2"
colorama==0.4.4; python_version >= "3.7" and python_full_version >= "3.6.2" and platform_system == "Windows"
...

虽然长得有点不一样,但这个档案确实是可以 pip install 的。

Poetry 常用指令清单

  • poetry add
  • poetry remove
  • poetry export
  • poetry env use
  • poetry shell
  • poetry show
  • poetry init
  • poetry install

修改 poetry 镜像源

poetry source add tsinghua https://pypi.tuna.tsinghua.edu.cn/simple

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用git工具管理泰山派内核源码目录及抽打补丁简易流程

目录 使用git工具管理泰山派内核源码目录及抽打补丁简易流程 一、使用git维护源码 二、git 常用的一些操作 三、抽补丁 四、打补丁 五、补充 使用git工具管理泰山派内核源码目录及抽打补丁简易流程 最近,在做linux开发的过程中入手了一块泰山派RK3566的开发板…

嵌入式初学-C语言-前言

概述 C语言是一种计算机编程语言,我们是利用代码来控制计算机的运行,从而达到某种目的,我们 就很有必要了解计算机的运行原理。 计算机组成 OS 应用程序 计算机硬件 基本组成: 输入设备:输入数据给计算机处理&…

详解Mysql InnoDB引擎 04

文章目录 1. InnoDB 简介2. 逻辑存储结构2.1 表空间 idb文件2.2 段2.3 区 1M2.4 页 16KB2.5 行 3. 架构3.1 内存结构3.1.1 Buffer Pool 缓冲池3.1.2 Change Buffer 更改缓冲区3.1.3 Adaptive Hash Index3.1.4 Log Buffer 3.2 磁盘结构 4. 后台线程5. 事务原理5.1 redo log 重做…

动态数据增强的艺术:Mojo模型的自定义应用

动态数据增强的艺术:Mojo模型的自定义应用 在机器学习和深度学习领域,数据增强是提升模型泛化能力的重要手段。Mojo模型,作为深度学习模型的一种封装形式,通常指的是通过训练得到的模型参数的集合,它能够被用于快速推…

运行python项目出现ModuleNotFoundError: No module named ‘sklearn‘问题

问题1:ModuleNotFoundError: No module named sklearn 1.WindowsR键,输入cmd,进入命令行窗口 2.安装sklearn,使用清华镜像安装: python -m pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple …

算法学习day22

一、函数的独占时间 给你一个进程数量,和运行日志。运行日志log的格式为:进程id:(start/end):运行时间 其中一个进程运行时可以被另一个优先级较高的进程抢占cpu。求每个进程独占cpu的时间。 输入:n 2, logs ["0:start:0","1:start:…

Spring Boot - 优雅实现支持通配符和IP段的IP访问黑白名单机制

文章目录 CodeIpAccessInterceptoraddInterceptor工具类配置文件 application.yml单元测试 Code 废话不多说,直接上码 IpAccessInterceptor package cn.cloud.bus.module.servicebus.framework.ipconfig;import cn.cloud.bus.module.servicebus.util.IpFilterUti…

深入理解计算机系统 CSAPP 家庭作业11.10

A: //home.html <form action"/cgi-bin/adder" method"GET"><ul><li><label for"n1">n1:</label><input type"text" id"n1" name"n1" /> //name的值决定页面提交后&#xf…

栈知识梳理和函数实现

参考此文章数据结构——栈&#xff0c;此文章写的更详细&#xff0c;由于我们都是学自于比特课程&#xff0c;这里做个自我备份&#xff0c;方便后续查阅、修改和补充。 栈知识梳理和函数实现 前言1.栈是什么&#xff1f;2.栈的接口实现2.1初始化栈2.2入栈2.3 出栈2.4 获取栈顶…

C语言图书信息管理系统

题目&#xff1a;图书信息管理系统 内容及主要功能描述&#xff1a; 该系统用于管理图书信息&#xff0c;包括图书的增加、删除、查找、修改、浏览、按出版社统计图书数量等功能。具体功能包括&#xff1a; 增加图书&#xff1a;输入图书信息并添加到系统中。删除图书&#x…

浅谈WebSerice

一. 什么是WebService Web Service也称为web服务&#xff0c;它是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP协议传输&#xff08;SOAP&#xff1a;Simple Object Access Protocol简单对象访问协议&#xff0c;soap属于w3c标准。并且soap协议是基…

C++ 算法:从基础到高级

C 算法&#xff1a;从基础到高级 C 是一种功能强大且高效的编程语言&#xff0c;广泛应用于系统编程、游戏开发、嵌入式系统以及高性能计算等领域。算法是程序设计的核心&#xff0c;掌握常用算法是成为优秀 C 程序员的必备技能。本文将介绍一些常用的 C 算法&#xff0c;从基…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞&#xff0c;本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码&#xff0c;结合后台计划任务功能&#xff0c;实现远程代码执行&#xff0c;严重威胁服务器安全。建议立即更新至安全版…

JAVA SE 类和对象

类和对象 类定义和使用类的定义格式 类的实例化什么是实例化 this 引用this引用的特性 对象的构造及初始化如何初始化对象构造方法概念特性 在这里插入图片描述 **注意**&#xff1a; 封装封装的概念封装扩展之包导入包中的类自定义包包的访问权限控制举例 static成员static修饰…

Spring Cloud全解析:入门指南与概览,轻松掌握微服务架构的基石

springcloud简介 微服务&#xff1f; 微服务是一种架构风格&#xff0c;将单体应用划分为小型的服务单元&#xff0c;微服务之间使用HTTP的API进行资源访问和操作&#xff0c;与SOA不同的是&#xff0c;SOA架构侧重于将每个单体应用的服务集成到ESB(消息总线)上&#xff0c;而…

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

[NOIP2001 普及组] 最大公约数和最小公倍数问题 题目描述 输入两个正整数 x 0 , y 0 x_0, y_0 x0​,y0​&#xff0c;求出满足下列条件的 P , Q P, Q P,Q 的个数&#xff1a; P , Q P,Q P,Q 是正整数。 要求 P , Q P, Q P,Q 以 x 0 x_0 x0​ 为最大公约数&#xff0c;以…

【计算机网络】TCP协议详解

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1、引言2、udp和tcp协议的异同3、tcp服务器3.1、接口认识3.2、服务器设计 4、tcp客户端4.1、客户端设计4.2、说明 5、再研Tcp服务端5.1、多进程版5.2、多线程版 5、守护进程化5.1、什么是守护进程5.2…

古籍双层PDF制作教程:保姆级古籍数字化教程

在智慧古籍数字化项目中&#xff0c;很多图书馆要求将古籍导出为双层PDF&#xff0c;并且确保输出双层PDF底层文本与上层图片偏移量控制在1毫米以内。那么本教程带你使用古籍数字化平台&#xff0c;3分钟把一个古籍书籍转化为双侧PDF。 第1步&#xff1a;上传古籍 点批量上传…

注释和关键字

注释 注释就是对代码的解释说明 单行注释 格式&#xff1a; // 多行注释 格式&#xff1a; /* */ 文档注释 格式&#xff1a; /** */ 关键字

云服务器Ubuntu18.04进行Nginx配置

云服务器镜像版本信息&#xff1a;Ubuntu 18.04 server 64bit&#xff0c;本文记录了在改版本镜像上安装Nginx&#xff0c;并介绍了Nginx配置文件目录&#xff0c;便于后面再次有需求时进行复习。 文章目录 Nginx的安装Nginx配置文件分析 Nginx的安装 1.执行下面命令进行安装…