共用poetry和conda的方法
起因
基于开源项目继续开发,发现该项目使用poetry管理依赖,但本地开发及调试环境依赖conda且未安装原生python,不支持直接安装poetry,因此需要使用conda安装及使用poetry。操作系统:Ubuntu
什么是poetry
一项依赖于独立的venv的Python依赖管理工具,安装要求Python>=3.9。poetry使用自己的算法管理依赖版本,使用pip下载和安装具体的依赖
错误安装方式及原因
错误复现
若阅读poetry文档不认真,则常犯以下错误:
1)使用conda创建一个python=3.10的环境(下称Epoetry);
2) 在Epoetry中使用pip安装poetry;
3) 不切换conda环境,使用poetry安装其他依赖
4) 使用poetry shell尝试启动poetry创建的某虚拟环境
然后发现,为什么poetry没创建虚拟环境,我的依赖跑到哪里去了。如果安装的依赖和poetry本身运行的依赖冲突,poetry甚至无法运行了
错误解析
poetry把依赖安装到Epoetry里了。poetry的文档指出,poetry会自动探测虚拟环境,如监测到虚拟环境则优先安装到虚拟环境而非自创虚拟环境。错误复现包含“在Epoetry中使用poetry安装依赖“项,因此poetry将依赖安装于Epoetry
一种正确安装及使用方式
- 创建一个独立的conda环境,用该环境生成venv
- 在该venv中安装poetry。安装方法参照官网:poetry官网安装指南
- 设置环境变量指向poetry可执行文件,方便调用
第3步展开说明:设置环境变量方便调用
假设venv的路径是/home/user/venv
,一般情况下poetry的位置是/home/user/venv/bin/poetry
. 假设我们使用export poetry="/home/user/venv/bin/poetry"
来设置环境变量,那么所有的poetry命令都可以直接用$poetry
替代。这里不推荐将/home/user/venv/bin
添加进PATH
,因为这会将整个虚拟环境暴露出来的风险