[英]Poetry doesn't use the correct version of Python
我最近安裝了 Pyenv 和 Poetry,並想創建一個新的 Python 3.8 項目。 我已經使用適當的 Pyenv 命令(例如pyenv global 3.8.1
3.8.1
將 python 的global
和local
版本都設置為 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.