依赖管理——Poetry vs Python venv

python环境配置之poetry&venv

1. venv

是python自带的模块, python3才有

1. 使用场景及使用逻辑

解决多个项目不可能共用一个全局依赖的问题

  1. 举例:
project1
依赖: req-v1.0
project2
依赖: req-v2.0
pip全局环境: req-v?

项目1和项目2依赖不同版本的同一包, 但是全局环境只能提供一个版本的包, 两个项目无法同时运行起来

  1. 解决方案——venv
project1
依赖: req-v1.0
project2
依赖: req-v2.0
project3
依赖: numpy
pip全局环境:
req-v1.0
numpy
venv1: req-v1.0
venv2: req-v2.0

venv是一个隔离的环境, 各venv和全局环境之间都是独立的, 互不干扰

2. 使用方法

  1. 进入项目文件夹

  2. 创建虚拟环境

    • Mac/Linux 创建名为myenv的虚拟环境 python3 -m venv myenv
    • Win 创建名为myenv的虚拟环境 python -m venv myenv
  3. 激活虚拟环境

    • Mac/Linux: source mien/bin/activate
    • Win:
      • CMD: myenv\Sctipts\activate.bat
      • Powershell: myenv\Sctipts\activate.ps1
  4. 在虚拟环境中安装需要的包, 和全局pip用法一样

  5. 退出虚拟环境

deactivate

2. poetry

大致等于pip+venv

相似工具: anaconda, npm, maven, go.mod, cargo

1. venv和pip的缺陷

1. pip的不足

第三方模块的依赖管理能力不足(第三方模块的依赖就是, 很多第三方包需要使用别的第三方包, 这就叫依赖, 因此安装时会把依赖的包也安装进来), 在安装包后依赖经常互相冲突, 删除包时也不能正确的处理依赖

2. venv的不足

2. poetry的功能

  • 管理第三方模块(和pip功能相似)
  • 管理虚拟环境
  • 管理虚拟环境的依赖(重要)
  • 打包与发布

3. poetry的使用

1. 安装

pip install poetry

2. 初始化poetry项目

poetry init

会有一连串的互动问题, 回答完后会生成项目的配置文件pyproject.toml

3. 创建虚拟环境

poetry env use xxx

如poetry env use python

4. poetry命令

使用逻辑:

选项:
  • -h, --help 显示给定命令的帮助信息。当未指定命令时,显示列表命令的帮助信息。
  • -q, --quiet 不输出任何消息。
  • -V, --version 显示此应用程序的版本。
    –ansi 强制启用 ANSI 输出。
    –no-ansi 禁用 ANSI 输出。
  • -n, --no-interaction 不要询问任何交互式问题。
    –no-plugins 禁用插件。
    –no-cache 禁用 Poetry 源缓存。
  • -C, --directory=DIRECTORY Poetry 命令的工作目录(默认为当前工作目录)。
  • -v|vv|vvv, --verbose 增加消息的详细程度:1 为正常输出,2 为更详细的输出,3 为调试输出。
可用命令:
  • about 显示有关 Poetry 的信息。

  • *add[添加依赖] 向 pyproject.toml 添加新的依赖项。

    • -D 仅添加到开发依赖中, 部署时不使用
    • 参数可以是包名, git url, 本地path
  • *build 默认情况下,构建一个包,作为 tarball 和 wheel。

  • check 检查 pyproject.toml 文件的有效性

  • *config 管理配置设置。

  • export 将锁定文件导出到其他格式。

  • help 显示命令的帮助信息。

  • *init 在当前目录中创建一个基本的 pyproject.toml 文件。

  • *install 安装项目的依赖项, 安装到本地。(已有pyproject.toml, 安装它)

  • list 列出命令。

  • *lock[锁定依赖] 锁定项目的依赖项。

  • *new[创建项目] 在 处创建一个新的 Python 项目。(会组织好文件夹)

  • publish 将包发布到远程存储库。

  • remove 从项目依赖项中删除包。

  • *run 在适当的环境中运行命令。

  • search 在远程存储库上搜索包。

  • *shell[虚拟环境] 在虚拟环境中生成一个 shell。

  • *show 显示有关包的信息。

  • update 根据 pyproject.toml 文件更新依赖项。

  • version 显示项目的版本或根据提供的有效版本规则增加版本号。

  • cache

    • cache clear 按名称清除 Poetry 缓存。
    • cache list 列出 Poetry 的缓存。
  • debug

    • debug info 显示调试信息。
    • debug resolve 调试依赖关系解析。
  • *env

    • env info 显示有关当前环境的信息。
    • env list 列出与当前项目关联的所有虚拟环境
    • env remove 删除与项目关联的虚拟环境。
    • *env use 激活或创建当前项目的新虚拟环境。
  • self

    • self add 向 Poetry 运行时环境添加其他包。
    • self install 安装此 Poetry 安装所需的已锁定包(包括附加组件)。
    • self lock 锁定 Poetry 安装的系统要求。
    • self remove 从 Poetry 运行时环境中删除其他包。
    • self show 显示 Poetry 运行时环境中的包信息。
    • self show plugins 显示当前安装的插件信息。
    • self update 更新 Poetry 到最新版本。
  • source

    • source add 为项目添加源配置。
    • source remove 删除项目配置的源。
    • source show 显示为项目配置的源信息。

poetry add / poetry install区别

poetry add library_name installs the library and adds it to the pyproject.toml file. Note - both installs the library and adds it to the file.

poetry install is used when you’ve directly edited the pyproject.toml file and added the dependency names manually. In that case, they aren’t installed yet, so, poetry install takes care of that.

namely, the add command adds packages to your pyproject.toml and installs them.The install command reads the pyproject.toml file from the current project, resolves the dependencies, and installs them.

5. 中间文件解释

pyproject.toml: 项目依赖, 打包发布声明(作者名字开源协议什么的)

poetry.lock: 确定项目的安装内容

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

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

相关文章

利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示。FastAPI 支持异步编程,使得开发高性能的 Web 应用变得简单快捷。在本文中,我们将探讨如何使用 FastAPI 结合 Jinj…

VS code 查看 ${workspaceFolder} 目录指代路径

VS code 查看 ${workspaceFolder} 目录指代路径 引言正文 引言 在 VS code 创建与运行 task.json 文件 一文中我们已经介绍了如何创建属于自己的 .json 文件。在 VS code 中,有时候我们需要添加一些文件路径供我们导入自定义包使用,此时,我们…

OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)

文章目录 一、基本图像增强(数值运算)1.1 加法 (cv2.add)1.1.1 图像与标量相加(调节亮度)1.1.2 图像与图像相加(两个图像shape要相同)1.1.3 图像的加权加法(渐变切换&…

基于SpringBoot+Vue+MySQL的网上租赁系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当前共享经济蓬勃发展的背景下,网上租赁系统作为连接租赁双方的重要平台,正逐步改变着人们的消费观念和生活方式。通过构建一个基于SpringBoot、Vue.js与MySQL的网上租赁系统,我们旨在为用户…

python线程(python threading模块、python多线程)(守护线程与非守护线程)

文章目录 Python多线程入门1. Python多线程概述2. threading模块基础- Thread 类: 这是一个代表线程的类。可以通过创建Thread类的实例来新建一个线程。- Lock 类: 在多线程环境中,为了防止数据错乱,通常需要用到锁机制。Lock类提供了基本的锁功能&#…

本地搭建我的世界服务器(JAVA)简单记录

网上参考教程挺多的,踩了不少坑,简单记录一下,我做的是一个私人服务器,就是和朋友3、4个人玩。 笨蛋 MC 开服教程 先放一个比较系统和完整的教程,萌新可用,这个教程很详细,我只是记录一下自己的…

【C++】list容器的基本使用

一、list是什么 list的底层结构是带头双向循环链表。 相较于 vector 的连续线性空间,list 就显得复杂很多,它是由一个个结点构成,每个结点申请的空间并不是连续的,它的好处是每次插入或删除一个数据,就配置或释放一个…

禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)

目录 一、采用TS求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比) 三、 如何修改代码?3.1 减少城市坐标,如下&am…

游戏如何对抗定制挂

近年来,游戏安全对抗强度相比以往更加激烈,具体表现在“定制挂”趋势显著。在近期收集的近万款外挂样本中,定制挂约占比78%,常见的内存修改器、变速器等通用作弊手段占比正在下降。 所谓定制挂,是指针对某款游戏单独开…

初写MySQL四张表:(2/4)

今天,我们来写第二张表。因着这四张表以及后续有相应的拓展,这四张环环相扣,所以还未写出第一张表的同学,可以看完第一张表,再来此处: 初写MySQL四张表:(1/4)-CSDN博客 好,今日表格有三张&…

easy-es动态索引支持

背景 很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大…

记忆化搜索专题——算法简介力扣实战应用

目录 1、记忆化搜索算法简介 1.1 什么是记忆化搜索 1.2 如何实现记忆化搜索 1.3 记忆化搜索与动态规划的区别 2、算法应用【leetcode】 2.1 题一:斐波那契数 2.1.1 递归暴搜解法代码 2.1.2 记忆化搜索解法代码 2.1.3 动态规划解法代码 2.2 题二&#xff1…

vue-使用refs取值,打印出来是个数组??

背景: 经常使用$refs去获取组件实例,一般都是拿到实例对象,这次去取值的时候发现,拿到的竟然是个数组。 原因: 这是vue的特性,自动把v-for里面的ref展开成数组的形式,哪怕你的ref名字是唯一的&#xff01…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

6.C++程序中的基本数据类型

数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类,它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名,是创建变量的模具,具体使用哪种模具(包括自定义&…

Python安装不再难!全平台保姆级教程带你轻松搞定!

Python介绍 Python是一种功能强大且灵活的编程语言,被广泛应用于各个领域。以下是Python在不同应用领域的一些常见用途: 网络开发 Python提供了丰富的库和框架,使其成为网络开发的理想选择。诸如Django、Flask和Pyramid等框架可以帮助开发人员…

一张图解析FastAdmin中的表格列表(bootstrap-table)的功能(备份)

功能描述 请根据图片上的数字索引查看对应功能说明。 1.菜单名称和描述 默认生成的CRUD是没有菜单名称和描述显示的,如果需要显示则可以修改权限管理->菜单规则,给对应菜单的添加上备注信息后即可显示,支持HTML 2.TAB过滤选项卡 在一键…

Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式)

前言: 发个之前的库存… Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式) 本次验证的是CentOS_7_Minimal-2009桌面模式来部署Oracle 11g r2,大家可根据自身环境及学习来了解。 环境:下载地址都给你们超链好了 1、Linux系统镜像包: 1.1 CentOS-7-x86_…

Linux 删除文件不释放空间问题处理

背景: 服务器磁盘空间已经达到100%,删除存放日志路径下的文件后,发现空间并未释放! 原因:在linux系统中,通过rm删除文件将会从文件系统的文件夹结构上解除链接(unlink)然后删除,然而假设文件是被…

探索Python的Excel世界:openpyxl的魔法之旅

文章目录 探索Python的Excel世界:openpyxl的魔法之旅背景:为什么选择openpyxl?什么是openpyxl?如何安装openpyxl?简单的库函数使用方法场景应用:openpyxl在实际工作中的应用常见bug及解决方案总结 探索Pyth…