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会卸载相应的库及其依赖。