执行poetry install后部分依赖包未安装到虚拟环境是什么原因?
问题原因
该问题由NixOS的Python包路径优先级机制导致:
NixOS会将系统或当前Shell环境下通过Nix安装的Python包路径(即/nix/store/下的对应路径)添加到Python的sys.path最前端,优先级高于Poetry创建的虚拟环境路径。当Poetry执行安装操作时,检测到已有符合版本要求的pluggy包存在,就不会再向虚拟环境目录重复安装该包。
从给出的输出来看,pluggy是tox、pytest的依赖,说明这两个包大概率是通过Nix方式安装,连带预装了对应版本的pluggy。
解决步骤
- 移除Nix环境中预装的相关Python包
检查你的configuration.nix、用户环境包列表或是当前Shell的shell.nix/flake.nix配置,移除通过Nix安装的pytest、tox这类Python项目依赖,将这类依赖统一放到Poetry的pyproject.toml中管理。 - 调整Poetry配置后重新安装依赖
执行以下命令清理现有虚拟环境,配置虚拟环境禁止继承系统站点包后重新安装所有依赖:# 删除当前项目的现有虚拟环境 poetry env remove python3.8 # 全局配置Poetry创建虚拟环境时默认不继承系统site-packages poetry config virtualenvs.options.no-site-packages true # 重新执行依赖安装 poetry install - 验证安装结果
执行poetry run pip show pluggy,确认输出的Location路径已经变为Poetry虚拟环境对应的站点包目录即可。
内容的提问来源于stack exchange,提问作者stianlagstad
相关产品推荐
相关产品推荐

