将 Poetry 与 PyEnv 一起使用并遇到 Python 版本问题

Mar*_*yan 13 python ubuntu python-venv pyenv

我正在使用 WSL2 Ubuntu。我一直在学习使用 Fastapi 进行后端 API 开发的课程。我相信我的 Ubuntu 默认 python 是 3.8。我正在尝试使用 python 3.10.0 进行开发。我做了以下事情:

\n
    \n
  1. pyenv安装3.10.0
  2. \n
  3. cd 到我的项目文件夹和 pyenv local 3.10.0 (创建包含 3.10.0 的 .python-version 文件)
  4. \n
  5. 诗歌 shell(这会创建一个 .venv 文件夹,并且所有依赖项都会在开发过程中添加到那里)。Bash 提示符中有 (.venv)。
  6. \n
  7. python --version 显示 3.10.0 作为当前版本
  8. \n
\n

我的问题是,当我查看 .venv/bin 文件时,所有符号链接都显示 python 3.8。

\n
drwxr-xr-x 2 mryan mryan 4096 Feb  1 23:12 .\ndrwxr-xr-x 4 mryan mryan 4096 Feb  1 23:12 ..\n-rw-r--r-- 1 mryan mryan 2152 Feb  1 23:12 activate\n-rw-r--r-- 1 mryan mryan 1444 Feb  1 23:12 activate.csh\n-rw-r--r-- 1 mryan mryan 3033 Feb  1 23:12 activate.fish\n-rw-r--r-- 1 mryan mryan 1303 Feb  1 23:12 activate.nu\n-rw-r--r-- 1 mryan mryan 1754 Feb  1 23:12 activate.ps1\n-rw-r--r-- 1 mryan mryan 1199 Feb  1 23:12 activate_this.py\n-rw-r--r-- 1 mryan mryan  333 Feb  1 23:12 deactivate.nu\n-rwxr-xr-x 1 mryan mryan  249 Feb  1 23:12 pip\n-rwxr-xr-x 1 mryan mryan  249 Feb  1 23:12 pip-3.8\n-rwxr-xr-x 1 mryan mryan  249 Feb  1 23:12 pip3\n-rwxr-xr-x 1 mryan mryan  249 Feb  1 23:12 pip3.8\nlrwxrwxrwx 1 mryan mryan   18 Feb  1 23:12 python -> /usr/bin/python3.8\nlrwxrwxrwx 1 mryan mryan    6 Feb  1 23:12 python3 -> python\nlrwxrwxrwx 1 mryan mryan    6 Feb  1 23:12 python3.8 -> python\n-rwxr-xr-x 1 mryan mryan  236 Feb  1 23:12 wheel\n-rwxr-xr-x 1 mryan mryan  236 Feb  1 23:12 wheel-3.8\n-rwxr-xr-x 1 mryan mryan  236 Feb  1 23:12 wheel3\n-rwxr-xr-x 1 mryan mryan  236 Feb  1 23:12 wheel3.8\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试使用命令诗歌 env use 3.10.0 时,我得到以下信息:

\n
(.venv) mryan ~/python/fastapi1/.venv/bin $poetry env use 3.10.0\n/bin/sh: 1: python3.10: not found\n\n  EnvCommandError\n\n  Command python3.10 -c "import sys; print('.'.join([str(s) for s in sys.version_info[:3]]))" errored with the following return code 127, and output:\n\n\n  at ~/.local/share/pypoetry/venv/lib/python3.8/site-packages/poetry/utils/env.py:378 in activate\n       374\xe2\x94\x82                     shell=True,\n       375\xe2\x94\x82                 )\n       376\xe2\x94\x82             )\n       377\xe2\x94\x82         except CalledProcessError as e:\n    \xe2\x86\x92  378\xe2\x94\x82             raise EnvCommandError(e)\n       379\xe2\x94\x82\n       380\xe2\x94\x82         python_version = Version.parse(python_version.strip())\n       381\xe2\x94\x82         minor = "{}.{}".format(python_version.major, python_version.minor)\n       382\xe2\x94\x82         patch = python_version.text\n(.venv) mryan ~/python/fastapi1/.venv/bin $python3.10\npython3.10: command not found\n
Run Code Online (Sandbox Code Playgroud)\n

我在这里做错了什么?我觉得我在这里错过了一些重要的东西。我浏览过无数关于诗歌和虚拟环境的网页。

\n

小智 22

我遇到了与您相同的问题,我曾经能够使用:

pyenv local 3.10.0

poetry new example-project

poetryexample-project基于 python 3.10.0 创建一个 venv。这不再对我有用,所以我发现这些命令对我有用

poetry new example-project
cd example-project/
poetry env use 3.10.0
poetry update
Run Code Online (Sandbox Code Playgroud)

如果您的项目已经安装了 venv,那么在使用该poetry env命令之前先将其删除可能是个好主意。我很确定你没有正确添加pyenv到你的PATH。查看 的安装说明pyenv特别是“为 Pyenv 配置 shell 环境”部分。