簡體   English   中英

詩歌沒有使用正確版本的 Python

[英]Poetry doesn't use the correct version of Python

我最近安裝了 Pyenv 和 Poetry,並想創建一個新的 Python 3.8 項目。 我已經使用適當的 Pyenv 命令(例如pyenv global 3.8.1 3.8.1將 python 的globallocal版本都設置為 3.8.1。 當我在終端中運行pyenv version時,輸出為3.8.1. 正如預期的那樣。

現在,問題是當我使用 Poetry ( poetry new my-project ) 創建一個新的 python 項目時,生成的pyproject.toml文件會使用 python 2.7 創建一個項目:

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["user <user@email.com>"]

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

[tool.poetry.dev-dependencies]
pytest = "^4.6"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

似乎 Poetry 默認回到 Python 的系統版本。 如何更改它以使其使用隨 Pyenv 安裝的版本?

編輯

我正在使用與 Python 2.7 捆綁在一起的 MacOS。 我認為這可能會導致這里的一些問題。 我再次使用 Pyenv 重新安裝了 Python 3.8,但是當我點擊Poetry install時,我收到以下錯誤:

The currently activated Python version 2.7.16 is not supported by the project (^3.8).
Trying to find and use a compatible version.

[NoCompatiblePythonVersionFound]
Poetry was unable to find a compatible version. If you have one, you can explicitly use it via the "env use" command. 

我應該使用 Pyenv 為項目顯式創建環境,還是項目應該能夠在運行pyenv local 3.8.1. ? 當我做后者時,沒有任何變化,我仍然得到同樣的錯誤。

pyproject.toml用於定義項目的所有依賴項,包括支持的 python 版本。

您抱怨的那一行只是說項目支持的python版本是python2.7或更高版本,這與您使用pyenv安裝的python版本無關。

python = "^2.7"

如果要更新項目支持的 python 版本,可以直接編輯文件並運行poetry update


如果你想使用多個版本的 python,你需要確保詩歌為你正在使用的 python 版本使用正確的依賴項。 要更改詩歌正在使用的特定版本,您應該使用poetry env

  • poetry env list顯示python詩歌可以使用的版本
  • poetry env use <python>切換詩歌以使用該版本。

例如,在我的機器上,poetry 安裝了 3 個虛擬環境,並且正在使用與 python3.6 關聯的一個:

↪ poetry env list
sipy-a9sqc5pb-py3.6 (Activated)
sipy-a9sqc5pb-py3.7
sipy-a9sqc5pb-py3.8

我不確定這些虛擬環境如何與 pyenv 使用的 shiv 交互,但他們的文檔有一個與之相關的部分

管理虛擬環境

有一個名為 pyenv-virtualenv 的 pyenv 插件,它具有各種功能,可幫助 pyenv 用戶管理由 virtualenv 或 Anaconda 創建的虛擬環境。 因為這些虛擬環境的激活腳本依賴於用戶交互式 shell 的變量 $PATH 變量,所以它會攔截 pyenv 的 shim 樣式的命令執行鈎子。 如果您有計划使用這些虛擬環境,我們建議您也安裝 pyenv-virtualenv。

好吧,我發現了問題。 有點尷尬的是,在運行任何其他命令之前,我沒有運行pyenv shell 3.8.1 現在一切正常。 謝謝大家的努力。

您可以使用為詩歌指定顯式 python 可執行文件

poetry env use <path to python executable>

這對我有用。

在我的機器上,我能夠通過重新安裝 Poetry 來修復“項目不支持當前激活的 Python 版本”錯誤:

curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | python3 -

之后, poetry能夠找到pyenv安裝的正確版本。

就我而言,我不得不刪除並重新創建詩歌使用的 virtualenv 這是因為我在創建 virtualenv 之后添加了 python 版本限制(例如python = ">=3.6.2 <3.7" )。

腳步

  • 刪除原來的:運行poetry env remove myApp-XkghI9p6-py3.6
  • 運行任何詩歌步驟,創建它,或運行poetry shell ,並確認poetry run python --version是正確的版本。

即使這個問題已經解決,我還是為再次遇到這個問題的人寫這篇文章。 在所有嘗試之后,我的 python -V 總是導致 2.7 並且沒有討論提到運行 pyenv shell(令我驚訝!)將 pyenv 添加到路徑

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

就我而言,我必須將其添加到 .bashrc 而不是 bash_profile。 https://ggkbase-help.berkeley.edu/how-to/install-pyenv/

工作!

就我而言,環境以某種方式被弄亂了,以至於詩歌未能正確激活 virtualenv。

嘗試使用不同的 shell:也許是 sh 或 zsh。 如果一切都在那個 shell 中工作,這證明你的環境和我的一樣一團糟:)

在兩個 shell 中使用此命令:

$ env

並嘗試找出差異

您可以從pyproject.toml文件中刪除 python 版本,然后運行Poetry install

對我有用的是運行python3.8 -m poetry install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM