Poetry:给你一个优雅的Python项目管理方式

简单来讲 , 通过使用Poetry ,让Python终于有了一种管理开发项目的虚拟环境和依赖关系的优雅方式 。
Poetry:给你一个优雅的Python项目管理方式文章插图
0.导引“There should be one — and preferably only one — obvious way to do it.”(应该有一种——最好只有一种——显而易见的方法来做到这一点 。 )
虽然这句话出自蒂姆.彼得斯的《Python之禅》 , 但Python并不总是遵循这一原则 。 Python没有达到理想的一个领域是项目管理 。 很长一段时间以来 , 管理Python项目涉及到工具和方法的大杂烩 。 然而 , 事实上的标准可能是新兴的Poetry 。
Poetry()给Python带来了Go和Rust长期以来所喜爱的那种一体化项目管理工具 。 Poetry允许项目对特定的包版本有确定性的依赖关系 , 因此它们在不同的地方一致地构建 。 Poetry还使构建、打包和向PyPI发布项目和库变得更加容易 , 这样一来 , 其他人就可以分享您的Python工作成果 。
在本文中 , 我们将介绍在Python开发项目中Poetry的使用——如何设置Poetry , 如何用Poetry配置项目的依赖关系和虚拟环境 , 以及如何避免Poetry独特的工作方式带来的一些陷阱 。
1.Python中配置PoetryPoetry()与其他Python依赖项和项目管理工具有所不同 , 从配置开始 。 与使用pip不同 , Poetry使用自定义安装程序(docs/#installation) 。 安装程序将Poetry应用程序添加到用户的配置文件目录中 , 因此它可应用于系统中当前或将来的任何Python安装 。
尽管您可以使用pip install poetry在特定的Python安装中安装Poetry , 但不建议这样做 , 因为:a)它可能会与其他系统文件冲突;b)它会使在不同的Python版本和不同的虚拟环境中一致使用Poetry变得困难 。
2.创建Poetry托管的Python项目安装了Poetry之后 , 只需输入poetry new, 就可以创建一个新的Poetry托管/管理项目目录 。 这个命令创建了一个名为的子目录 , 并使用一个项目脚手架填充该目录 。
【Poetry:给你一个优雅的Python项目管理方式】Poetry项目“脚手架”包括以下内容:

  • pyproject.toml——项目定义文件 。 Poetry为你管理这个定义 。 如果您知道自己在做什么 , 您可以直接编辑这个文件 , 但大多数时候并不需要这样做 。
  • README.rst——一个空的README文件 , 格式为ReStructuredText , 该文件格式用于Python文档 。 (没有规定说你的文档必须使用.rst格式 , 对于较简单的情况 , 可以使用Markdown 。 )
  • tests——带有用于单元测试的脚手架的子目录 。 如果您还没有为新项目编写测试的习惯 , 那么您应该养成这样的习惯!
  • 最后 , 是项目名称的子目录 , 其中包含项目的代码 。
3.Poetry中管理Python虚拟环境 对于一个新的Poetry项目 , 您可能首先需要的是一个Python虚拟环境 。 与形式一样 , 诗歌有其独特的处理虚拟环境的方式 。 Poetry不是将虚拟环境放在项目目录中 , 而是将它们放在一个根据操作系统不同而不同的集中缓存目录中 , 如下所示:
  • Unix: ~/.cache/pypoetry/virtualenvs
  • MacOS: ~/Library/Caches/pypoetry/virtualenvs
  • Windows: C:\Users\\AppData\Local\pypoetry\Cache\virtualenvs or %LOCALAPPDATA%\pypoetry\Cache\virtualenvs
Poetry的方法的优势是能够跨项目共享虚拟环境 , 只要它有意义 。 但这确实需要改变你的工作习惯 。
要在Poetry中设置虚拟环境 , 转到项目的目录并键入poetry env use python 。 Poetry将创建一个新的虚拟环境 , 将其存储在缓存目录中 , 并为虚拟环境显示一个随机生成的名称(请注意名称 , 以便以后使用) 。
为了方便起见 , Poetry还将安装项目在pyproject.toml文件中列出的所有依赖项 。 如果您想要从其他地方复制一个Poetry项目并在您的系统上设置它 , 您会发现这个超级有用 。
注意 , 如果您在一个已经有Poetry分配的虚拟环境的项目目录中使用poetry env use python, 那么Poetry将在CLI会话的上下文中激活该虚拟环境 。
接下来是比较困难的部分 , 即让Poetry管理的虚拟环境与IDE一起工作 。 例如 , Visual Studio Code自动检测项目目录中虚拟环境的存在 , 但依然还检测不到使用Poetry管理的虚拟环境的存在 。 近期的解决方案是在项目settings.json文件中添加一行 , 指明Poetry保存虚拟环境的位置:
"python.venvPath": "C:\\Users\\username\\AppData\\Local\\pypoetry\\Cache\\virtualenvs"
在进行此更改后 , 请确保重新启动Visual Studio Code 。
如果你不想让Poetry管理你的虚拟环境 , 你可以用如下命令禁用它: