You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的pyenv为3.10.1、系统Python为3.8,为何poetry new默认设3.9?

问题

我用pyenv管理的Python版本是3.10.1,系统默认Python版本为3.8,但执行poetry new poetry-demo命令创建项目后,生成的pyproject.toml文件里Python依赖配置却是:

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

我的poetry配置信息如下:

poetry config --list
cache-dir = "/home/user/.cache/pypoetry"
experimental.new-installer = true
experimental.system-git-client = false
installer.max-workers = null
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/user/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
原因分析

问题根源在virtualenvs.prefer-active-python = false这个配置:

  • 当该配置为false时,Poetry不会优先使用当前shell里激活的Python版本(也就是你通过pyenv切换的3.10.1),而是会扫描系统中所有可用的Python版本,选取它识别到的最高兼容版本,以此作为生成pyproject.toml的版本约束依据。
  • 你的系统里大概率存在一个未被pyenv管理的3.9.x版本Python,Poetry检测到这个版本是当前能找到的最高版本,所以自动生成了^3.9的约束。
解决办法
  1. 让Poetry优先使用当前激活的Python版本
    执行下面的命令修改配置:

    poetry config virtualenvs.prefer-active-python true
    

    之后再创建新项目,Poetry就会基于当前shell激活的Python版本(比如3.10.1)生成对应的版本约束(比如^3.10)。

  2. 创建项目时手动指定Python版本
    如果不想修改全局配置,创建项目时直接指定目标版本即可:

    poetry new poetry-demo --python "^3.10"
    
  3. 清理系统中多余的Python版本
    检查系统里有没有未被pyenv管理的3.9.x版本,要是用不上就卸载掉,避免Poetry误检测。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:22:27