python poetry install问题?

这主要可以帮助某人从JavaScript开发人员过渡到python开发人员。

我从未使用过rubygems,但是将其主要功能与主要的python软件包管理器进行比较可能也很有用。帮助任何来自红宝石背景的人。



  • pipenv如果使用第3方dev依赖项以及将它们捆绑在一起的脚本则可以直接与一起发布,请参见下文。

免责声明:我仅在'NIX系统(特别是OSX)上具有这些软件包管理器的经验,pipenv将Windows视为头等公民,这让我自己市场,我不确定如果没有pyenvWindows的话,它是如何工作的,到目前为止,Windows上是不可用的我知道。

要充分利用pipenvpyenv应安装。即使未激活,也pipenv将能够检测和使用随python安装的任何版本pyenv例如,如果a

Pipfile.lock使用以下命令安装现有的依赖项此命令还可用于创建Pipfile和venv(默认为最新的可用python版本)。

要在创建的venv中运行命令:

诗歌仍在使用,pyenv使用的方式有所不同:您必须在调用poetry

或可以使用以下方法创建完整的目录结构:

在安装之前,我们必须激活一个与pyproject.toml文件中指定内容匹配的python版本

现在我们可以使用下面的命令创建venv了,如果存在poetry.lock文件,它将安装其中列出的所有依赖项。

要在创建的venv中运行命令:

如果使用更改全局python版本pyenv,则将不再能够在创建的venv中运行命令。如果我们使用本地创建的venv,则有一个例外,请参见下文。

有时,最好检查一下您的代码在python 3.7和python 3.4上都可以使用。这不是我们可以理所当然的事情。

只有通过使用其他python版本重新创建venv才能删除它:

可能会显示警告,说明venv的python版本与中指定的venv不匹配Pipfile,但据我所知,这仅仅是警告。

诗歌更适合此用例:可以并排创建多个venv。要使用来创建和使用新的venv开关python版本,pyenv然后创建一个新的venv。

如果python版本与python中指定的版本不匹配,则会引发错误,pyproject.toml但是可以使用semver版本控制指定一系列python版本。

我更喜欢将venv安装在.venv项目本地文件夹中,这类似于npm工作方式,并且允许我删除该文件夹并在发生任何奇怪的情况下或者如果我想轻松更改哪个版本(如果是pipenv的话)重新安装我正在使用的Python。

要启用此功能:设置以下环境变量。

可以使用以下命令启用此功能:

但是请注意,这将改变的行为poetry,将不再可能在不同版本的python之间进行快速切换:即使使用pyenv所有运行的命令切换了python版本,该命令poetry run也会使用venv(及其相关的python版本)驻留在本地目录中。

软件包易于安装,PipfilePipfile.lock可以使用以下方法自动添加到文件中:

--dev标志指示开发依赖性。使用时,默认情况下不会安装开发依赖项pipenv install

也可以安装本地软件包,使您可以使用它们并立即查看更改:

软件包易于安装,pyproject.tomlpoetry.lock可以使用以下方法自动添加到文件中:

--dev标志指示开发依赖关系,在使用时默认情况下将不安装开发依赖关系,poetry install在发布时不会将其添加到程序包中。

也可以安装本地软件包,使您可以使用它们并立即查看更改:

不确定为什么需要包名称,因为它应该已经由本地包定义。同样,作者似乎对一般地链接本地包不信服(),因此随着时间的流逝,此功能可能会被遗忘。

为了清楚起见,我指的是npm所谓的脚本,这与setup.py文件内指定的脚本不同


因此,理想情况下,我们希望从中获取setup.py文件Pipfile

我发现有两个声称可以做到这一点的软件包:

  1. 但是两年来没有更新,src目录中没有代码,我无法正常工作。

  2. 但是它同步Pipfile.lock而不是Pipfile,这是一种反模式。锁定文件用于创建可重现的环境,它用于的限制过于严格(例如,不允许更新依赖项)setup.py因此,我什至没有尝试使用它。


站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取,关注公众号回复充值+你的账号,免费为您充值1000积分


PDM 是一个新的 Python 的包管理器,也许你还未知晓它的存在,但实际上PDM 已经诞生两年,并在 2021 年发布 1.0 版本,目前最高的版本是 1.12.8。

一直到我翻到了作者的博客,才知道 PDM 的全称是 Python Development Master,比我想像的还要牛逼一个档次。

值得一提的是,PDM 的作者是 PyPa 成员、Pipenv 目前主要的维护者之一,最重要的是,他是中国人,因此这是一款国人开发的工具。

早期的包管理器(如 Pipevn,Poetry),都是基于虚拟环境的,虚拟环境主要是为了隔离项目开发环境,但如果涉及到虚拟 环境嵌套虚拟环境,问题就难搞了,经常会出现问题。

从作者的博客上来看,当初之所以要重复造个轮子,完全是因为 Pipenv 和 Poetry 都不够好用,正好有 PEP582 ,可以开发一个划时代的 Python 包管理工具,它就是 PDM 。

PDM 包含如下特性:

  • PEP 582 本地项目库目录,支持安装与运行命令,完全不需要虚拟环境。
  • 一个简单且相对快速的依赖解析器,特别是对于大的二进制包发布。
  • 兼容 PEP 517 的构建后端,用于构建发布包(源码格式与 wheel 格式)
  • 拥有灵活且强大的插件系统(有插件系统直接就拉开一个档次)
  • 像 pnpm 一样的中心化安装缓存,节省磁盘空间

尽管 PDM 是国人开发,但考虑到国际化,官网文档是全英文的。

我花了整整一天,通读完文档,消化了 70% 的 PDM 用法,现将心得整理分享出来,会对你上手 PDM 有帮助。

关于 PDM,内容挺多的,打算分两部分文章来完整地介绍它:

本篇是第一篇,先让大家对 pdm 的基本用法有一个框架性的理解,而 pdm 真正竞争力请持续关注后续文章。

在以前的文章中,我推荐过 pipx 工具,在安装那种命令行应用的包时非常好用。

而此时 PDM 就是一个命令行工具,因此我也推荐使用 pipx 安装,方便统一对命令行进行管理

PDM 只有 Python 3.7+ 的版本才能使用,使用其他的方法安装,要先保证你的 Python 版本,但使用 pipx 则不需要你去操心。

执行 pdm init 就会开始初始化,初始化的时候,会让你选择项目的一些信息

我机器上有 Python 2.7 和 Python 3.10 两个版本,在初始化项目时会把机器上的所有 Python 版本都扫描出来了,会让选择项目的 Python 版本。

pdm 有非常多的命令,使用 -h 可以看到帮助菜单

和 Poetry 一样,安装使用的是 add 命令,但 pdm 的 add 比 poetry 好用,主要体现在分组,具体请关注后续文章

使用 pdm list 可以以列表形式列出当前环境已安装的包

再加个 --graph 就能以树状形式查看,直接依赖包和间接依赖包关系的层级一目了然

要查看某个包的某体详情,直接用 pdm show 即可

删除包使用的是 remove 命令

不加任何参数,可以打印出该项目的环境配置

想要修改的话,只要加 key 和 value 做为参数即可,以修改 pypi 镜像代理为例

原来上面是豆瓣源,现在我要改成阿里源,只需要执行如下命令,可比 poetry 方便多啦~

pdm config 里面有非常多的配置,想要一一搞清楚的可以去官网查阅:

想要在 pdm 的环境中执行命令或者项目,可以使用 run 命令,若是执行项目时,有诸多参数,可以在 pyproject.toml 配置命令别名,具体用法,请往后看

使用 info 命令,可以查看当前项目的环境信息

更新的话,简单的场景下,使用下面这两条即可

复杂的场景,pdm 也都为你考虑到了,它提供了很多选项,可以根据需要使用(以下如有解释错误,请帮忙指正)

  • --update-reuse:尽量只更新命令行中指定的包,其依赖包能不更新则不更新
  • --update-eager:更新某个包顺带更新其依赖包(递归升级)
  • --unconstrained:忽略包版本的约束,可将包升级至最新版本

如果你的依赖包有设置分组,还可以指定分组进行更新

也可以指定分组更新分组里的某个包

再加个 -d 就可以再指定 dev 依赖

# 更新 dev 依赖下某个分组的某个包

当你在初始化 pdm 项目时,就已经选定了当前的 Python 版本和可用的 Python 版本范围,后面如果想更改,可以使用 use 命令,但版本要受之前设定的版本范围约束。

在 pyproject.toml 添加 [tool.pdm.scripts] 可以设置快捷命令别名,若项目的执行有非常多的参数,这种设定别名的方法将很有用。

但若想在参数中加注释,就必须得使用第二种方法,例如这样

除了 cmd 之外,还有两个参数

一个是 env_file 参数,可以指定配置环境变量的文件

如果想要把这个环境变量的文件不仅限于某个命令,而是 pdm run 全局,可以这样配置

--list 或者 -l可以查看所有设置的快捷别名

对于每一个快捷命令,都可以设置 pre 和 post 命令:

  • pre 命令:在每次快捷命令执行前会执行
  • post 命令:在每次快捷命令执行后会执行

pdm 的命令虽多,但并不复杂,并不太需要使用自动补全,若你真的需要补全,也可以实现。

对于不同的 shell,自动补全的配置方式都不太一样,这个在官网上有详细的说明。

如果你和我一样使用的 zsh,可以参照我的配置方式。

其他方案迁移到 pdm

pdm 足够好用,也足够开放,如果你当前使用的是其他的包管理器,比如 pipenv ,poetry,或者还在用最原始的 requirements.txt ,你也可以很方便的迁移到 pdm 中来:

  • 执行 pdm init 或者 pdm install 的时候,会自动识别你当前的依赖情况并转换

pdm 迁移到其他方案

同样的,你也可以当 pdm 管理的项目,导出为其他方案

pdm 做为一个后起之秀,也没有忘本,它支持:

花了很大的力气,终于把 PDM 的基本用法给介绍完毕,相信一定会有人会提出质疑:这就是你所谓的 划时代的包管理器

实际上,上面仅仅是入门操作,而 PDM 的一些核心知识,考虑到篇幅有限,我将这些进阶类的内容安排在后续文章,它将包括但不仅限于:

  • 发布包的构建:PEP 517 提案
  • Hook 脚本的定义与使用
  • 插件管理系统与自定义插件

这些内容是 PDM 的核心,只有理解了这些,你才能真正用好 PDM,到那时你会感慨:为什么 Guido 还不把这样的工具收编成标准的包管理工具?

关于 PDM 后续进阶文章,请关注我的个人公众号《写点代码的明哥》

我会在那里持续更新关于 PDM 的进阶用法

关于包和虚拟环境管理工具,很多工具我都写过专门的文章介绍过

感兴趣想系统学习的,可以访问这个链接:

你平时使用什么包管理工具?

有了PDM,你还会使用这些工具吗?

欢迎你在评论区分享一下

我要回帖

更多关于 pip install 失败 的文章

 

随机推荐