当前位置: 首页 > news >正文

poetry安装

文章目录

  • 前言
  • 1. 为什么pip install poetry 会造成依赖冲突
    • 1.1 全局环境依赖混淆:
    • 1.2 工具和项目之间的冲突:
    • 1.3 缺乏依赖隔离:
    • 1.4 多出很多额外依赖:
  • 2. 不推荐pipx安装
  • 3. poetry高级安装
    • 3.1 默认安装路径
    • 3.2自定义安装
  • 4. 安装poetry实战
    • 4.1 下载安装脚本文件
    • 4.2 通过脚本安装poetry
    • 4.3 配置环境变量
    • 4.4 修改poetry下载的三方包虚拟环境
    • 4.5 在老项目中使用poetry
    • 4.6 在新项目中使用poetry


前言

Poetry 是一个用于管理 Python 项目的依赖和构建过程的工具。它简化了包管理和虚拟环境的创建,让开发者更容易管理项目的依赖关系。它的出现让我们对依赖卸载更干净。


1. 为什么pip install poetry 会造成依赖冲突

直接使用 pip install poetry 安装 Poetry 可能会造成依赖冲突,原因主要是 pip 在全局环境中安装包的方式可能导致多个项目或工具之间的依赖冲突。这些冲突通常发生在以下几种情况下:

1.1 全局环境依赖混淆:

  • pip install poetry 会将 Poetry 及其依赖项安装到 Python 的全局环境中。如果全局环境中已经存在某些依赖项,并且它们的版本与 Poetry 依赖的版本不同,安装可能会覆盖这些依赖项,导致其他依赖同样库的工具或项目无法正常工作。
  • 例如,Poetry 依赖某个特定版本的 tomlkit 库,而系统中的某个项目依赖不同版本的 tomlkit。安装 Poetry 后,tomlkit 版本被改变,系统中的其他项目可能因此失败。

1.2 工具和项目之间的冲突:

  • 当你在全局环境中安装多个工具(例如,Poetry 和另一个 Python 工具),这些工具可能依赖于同一个库但要求不同版本。pip 在安装时并不会为每个工具创建独立的环境,所以这会导致一个工具的依赖被另一个工具的依赖覆盖,从而导致功能失效。

1.3 缺乏依赖隔离:

  • pip 默认安装到全局环境中,所有项目和工具共享同一个依赖池。这意味着不同项目或工具之间无法隔离它们的依赖,这会增加依赖冲突的风险。
  • 由于全局环境中所有包共享一个空间,因此多个包之间的版本需求可能不一致,造成某些包运行失败。

1.4 多出很多额外依赖:

下载之前:

在这里插入图片描述

下载之后:

在这里插入图片描述

2. 不推荐pipx安装

在这里插入图片描述

这里有个机翻 https://www.tobyblogs.cn/PoetryCn/1/

3. poetry高级安装

3.1 默认安装路径

By default, Poetry is installed into a platform and user-specific directory:

  • ~/Library/Application Support/pypoetry on MacOS.
  • ~/.local/share/pypoetry on Linux/Unix.
  • %APPDATA%\pypoetry on Windows.

3.2自定义安装

如果您想更改此设置,可以定义 $POETRY_HOME 环境变量:

curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 -

如果要安装预发行版本,可以通过将 --preview 选项传递给安装脚本或使用 $POETRY_PREVIEW 环境变量来实现:

curl -sSL https://install.python-poetry.org | python3 - --preview
curl -sSL https://install.python-poetry.org | POETRY_PREVIEW=1 python3 -

如果要安装特定版本,可以使用 --version 选项或 $POETRY_VERSION 环境变量:

curl -sSL https://install.python-poetry.org | python3 - --version 1.2.0
curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.2.0 python3 -

4. 安装poetry实战

4.1 下载安装脚本文件

windows+R 输入powershell

然后在powershell中输入:

Invoke-WebRequest -Uri https://install.python-poetry.org -OutFile install-poetry.py

在当前路径下可以看到install-poetry.py被生成

4.2 通过脚本安装poetry

然后通过这个install-poetry.py安装poetry

首先创建自定义文件夹

cd D:\Program Files:
D:
mkdir Poetry

然后切换到install-poetry.py所在的目录,输入以下命令

$env:POETRY_HOME = "D:/Program Files/Poetry"; python install-poetry.py

4.3 配置环境变量

在这里插入图片描述

把poetry安装目录下的bin添加到系统环境变量

PS D:\Program Files\Poetry\bin> Get-ChildItem | Format-List Name, Length, LastWriteTimeName          : poetry.exe
Length        : 0
LastWriteTime : 2024/8/18 14:09:11

在这里插入图片描述

检查是否安装成功

PS C:\Users\Administrator> poetry --version
Poetry (version 1.8.3)
PS C:\Users\Administrator>

4.4 修改poetry下载的三方包虚拟环境

查看poetry配置

PS C:\Users\Administrator> poetry config --list
cache-dir = "C:\\Users\\Administrator\\AppData\\Local\\pypoetry\\Cache"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}\\virtualenvs"  # C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true
PS C:\Users\Administrator>

不想让poetry下载的三方包在默认路径下,让他下载到我们自定义的目录。 virtualenvs.in-project 是 Poetry 的一个配置选项,用于决定虚拟环境是否应该放在项目目录内。

virtualenvs.in-project = true: 如果这个选项设置为 true,Poetry 会在项目的根目录下创建一个 .venv 文件夹,并在其中创建虚拟环境。这意味着每个项目都有一个独立的虚拟环境位于项目目录内,便于管理和隔离。

PS C:\Users\Administrator> poetry config virtualenvs.in-project true
PS C:\Users\Administrator> poetry config --list
cache-dir = "C:\\Users\\Administrator\\AppData\\Local\\pypoetry\\Cache"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}\\virtualenvs"  # C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

4.5 在老项目中使用poetry

cd myproject
poetry init
poetry init --no-interaction       不适用交互模型,生产的toml文件配置是默认参数

4.6 在新项目中使用poetry

poetry new my_project

相关文章:

  • BUUCTF蜘蛛侠呀
  • Synchronized是怎么实现的?
  • [SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
  • 力扣9.28
  • Python按照指定“字体大小以及字体格式”,批量更新Word文档内容(10)
  • 基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
  • Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
  • HTTP请求中GET与POST方法的核心区别与用途解析
  • VMware下的ubuntu显示文字太小的自适应显示调整
  • 力扣题解2286
  • 【高分系列卫星简介——高分五号卫星(GF-5)】
  • Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)
  • 【NodeJS】npm、yarn、pnpm当前项目设置国内镜像源
  • 【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
  • linux脚本工具
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • AngularJS指令开发(1)——参数详解
  • happypack两次报错的问题
  • JAVA_NIO系列——Channel和Buffer详解
  • Java多线程(4):使用线程池执行定时任务
  • js对象的深浅拷贝
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • node入门
  • react 代码优化(一) ——事件处理
  • Vue全家桶实现一个Web App
  • 阿里研究院入选中国企业智库系统影响力榜
  • 初识MongoDB分片
  • 两列自适应布局方案整理
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何选择开源的机器学习框架?
  • 深入浏览器事件循环的本质
  • 思维导图—你不知道的JavaScript中卷
  • 以太坊客户端Geth命令参数详解
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 进程与线程(三)——进程/线程间通信
  • ‌JavaScript 数据类型转换
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # include “ “ 和 # include < >两者的区别
  • (07)Hive——窗口函数详解
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)(3.5) 遥测无线电区域条例
  • (3)nginx 配置(nginx.conf)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (NSDate) 时间 (time )比较
  • (WSI分类)WSI分类文献小综述 2024
  • (安卓)跳转应用市场APP详情页的方式
  • (二十四)Flask之flask-session组件
  • (六)软件测试分工
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)u-boot-nand.bin的下载
  • (一一四)第九章编程练习
  • *上位机的定义