Python缺乏优秀的包管理工具,听说poetry是个神器,前天下载来用一下试试。搜了一圈,网上的教程都稍显复杂,并且感觉写得不太清晰,花了两个小时,阅读了官网的文档,记录一下学习过程。

官网地址:https://python-poetry.org/

  • 安装

Windows 10环境下,使用管理员权限运行powershell,安装poetry。国内环境,如下方法需要梯子,你懂的,pip安装不需要梯子。

(Invoke-WebRequest -proxy http://127.0.0.1:10809 -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python

 poetry的默认安装路径在C:\user\你的用户\.poetry目录下,也可用使用pip直接安装在python的全局目录下(官方不推荐这样安装,相关的依赖包可能会和其他第三方库的依赖包冲突。)

pip install poetry

安装完成之后,输入如下命令,查看是否安装成功,poetry的1.1.4版本会自动在环境变量中添加poetry的路径。如果是使用pip安装,poetry会在Python的scripts目录下生成poetry.exe可执行文件。

poetry --version

如果没有梯子,不能在线安装,先把https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py下载到本地,然后去github把poetry-1.1.4-win32.tar.gz下载回来,放在同一个目录下面,运行:

python get-poetry.py --file poetry-1.1.4-win32.tar.gz

如何下载以上两个文件:

1、首先在ip138或者其他网站查询raw.githubusercontent.com的IP地址
2、修改C:\Windows\system32\drivers\etc目录下的hosts文件,把查到的IP地址和域名添加进去
3、使用浏览器访问如上地址,把py文件的内容复制到本地。
4、访问https://github.com/python-poetry/poetry/releases,下载对应的包到本地。

 

  • 配置国内源

网上有教程说,Windows平台下,poetry会自动去读取pip的全局配置。在我实际使用中,似乎并没有。当然,我没有实际去抓包跟踪,只是凭借下载第三方库的时间长短的感觉来说的。

进入自己的项目目录,输入

poetry new poetry-demo

  命令运行挺快,在项目目录下会生成一个peotry-demo目录,结构如下:

poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py

peotry-demo目录中生成一个pyproject.toml文件,内容如下:

[tool.poetry]
name = "server"
version = "0.1.0"
description = ""
authors = ["马赛克内容"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

在文件的最后插入如下内容,可以配置国内源,我这里使用的是清华的源头。

[[tool.poetry.source]]
name = "tsinghua"
default = true
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
  • cache和虚拟环境配置

默认情况下,会往C盘安装虚拟环境、第三方库,缓存也会放在C盘。首先在cmd运行如下命令

poetry config --list

  显示如下:

cache-dir = "C:\Users\<username>\AppData\Local\pypoetry\Cache"
experimental.new-installer = true
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.path = "{cache-dir}\virtualenvs"

默认情况下,虚拟环境和第三方库都会往C盘里面安装,可以直接编辑C:\Users\Administrator\AppData\Roaming\pypoetry\config.toml文件,修改缓存和虚拟环境配置。编辑内容如下:

cache-dir = "f:\\poetry\\cache"
[virtualenvs]
in-project = true

  修改完成之后,再次使用peotry config --list命令,显示如下:

cache-dir = "f:\\poetry\\cache"
experimental.new-installer = true
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "f:\\poetry\\virtualenvs"

  也可以使用命令修改相应配置,只需要把Virtualenvs.in-project改为true,虚拟环境和第三方库都会安装在项目目录下。命令如下:

poetry config virtualenvs.in-project true
# 修改缓存目录
poetry config cache-dir 你的目录
  •  使用

使用poetry并不需要激活虚拟环境,进入到项目目录,直接执行poetry add 第三方库名,即可。poetry会自己检测虚拟环境,分析库的依赖,在安装的同时,讲内容写入到pyproject.toml文件中,部署应用程序的时候,执行poetry install即可安装所有的库。

F:\poetry\server>poetry add pandas
Using version ^1.2.2 for pandas

Updating dependencies
Resolving dependencies...

Writing lock file

Package operations: 4 installs, 0 updates, 0 removals

  • Installing six (1.15.0)
  • Installing python-dateutil (2.8.1)
  • Installing pytz (2021.1)
  • Installing pandas (1.2.2)

F:\poetry\server>

  安装完之后,pyproject.toml文件的内容如下(我是先安装了numpy,再安装的pandas,并没有在命令里体现出来):

[tool.poetry]
name = "server"
version = "0.1.0"
description = ""
authors = ["马赛克内容"]

[tool.poetry.dependencies]
python = "^3.9"
numpy = "^1.20.1"
pandas = "^1.2.2"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[[tool.poetry.source]]
name = "tsinghua"
default = true
url = "https://pypi.tuna.tsinghua.edu.cn/simple"

卸载第三方库也很简单,使用poetry remove 第三方库名,poetry会卸载相应的库及其依赖。