Установите последнюю версию Python с помощью pyenv

При использовании ruby-install для установки последней стабильной версии Ruby требуется всего ruby-install ruby.

Однако с pyenv, похоже, нужно сделать что-то нелепое, например pyenv install $(pyenv install --list | sed 's/^ //' | grep '^\d' | grep --invert-match 'dev\|a\|b' | tail -1).

Есть лучший способ сделать это? Почему инструменты Python, кажется, всегда делают установку последней версии таким тупым процессом по сравнению с ruby ​​(gem update vs pip list --outdated | awk '!/Could not|ignored/ { print $1 }' | xargs pip install --upgrade)? Я надеюсь, что мне что-то не хватает, но я никогда не могу найти простых решений для этого в Интернете.


person user137369    schedule 16.04.2015    source источник
comment
У меня нет опыта работы с pyenv, но я смотрю источник команды установки похоже, что такой встроенной команды действительно нет. Вы можете добавить сценарий, содержащий уже имеющуюся командную строку, по пути pyenv/libexec хотя (например, pyenv/libexec/pyenv-update), который затем можно было бы назвать pyenv update.   -  person Max Truxa    schedule 17.04.2015
comment
У меня нет проблем с использованием команды, мне просто интересно, есть ли более простой способ по умолчанию. В этом отношении инструменты Python всегда кажутся невероятно сложными по сравнению с ruby.   -  person user137369    schedule 17.04.2015


Ответы (4)


Попробуйте https://github.com/momo-lab/pyenv-install-latest

Установка...

git clone https://github.com/momo-lab/pyenv-install-latest.git "$(pyenv root)"/plugins/pyenv-install-latest

Последняя версия 2.7 сборки python ...

pyenv install-latest 2.7

а для python 3 ...

pyenv install-latest

person Dave    schedule 04.04.2017
comment
Спасибо, но для этого я мог бы просто придерживаться своей команды. Вопрос был в том, есть ли официальный способ сделать это менее тупым. - person user137369; 06.04.2017
comment
@ user137369 Этот комментарий не имеет смысла. ruby-install не более официальный, чем pyenv install-latest. Он не поставляется с официальным установщиком ruby ​​или управлением пакетами дистрибутива. Это правильный ответ. Я не вижу причин не отмечать его как таковой. - person nurettin; 20.01.2021
comment
Для записи, репозиторий был обновлен и теперь указывает на этот вместо этого, который по иронии судьбы охватывает rbenv - person nurettin; 20.01.2021
comment
@nurettin Официально для pyenv, не официально для python. Это неправильный ответ, потому что он не решает проблему, он просто требует установки дополнительного программного обеспечения (и, как я уже сказал, для этого мне лучше использовать то, что у меня уже было). - person user137369; 22.01.2021
comment
@ user137369 Я знаю, что у тебя есть то, что тебе нужно. Просто скажу, что ruby-install - это дополнительное программное обеспечение, и это тоже, и это плагин, который является частью экосистемы и предназначен для этой конкретной проблемы. - person nurettin; 23.01.2021
comment
@nurettin ruby-install - это дополнительное программное обеспечение поверх ruby. Это решение представляет собой дополнительное программное обеспечение поверх pyenv, которое является дополнительным программным обеспечением поверх python, и бесполезно для моих нужд. Я не собираюсь добавлять зависимость поверх другой без всякой выгоды. Я понял вашу точку зрения, это вы меня не понимаете. Этот ответ не решает проблему. комментарий выше, в котором говорится, что нет возможности точнее. - person user137369; 23.01.2021
comment
Что ж, тогда это все субъективно. Я пришел сюда с той же проблемой и нашел то же самое решение, и оно отлично работает для меня, что, по-видимому, ничего не значит. - person nurettin; 23.01.2021

Следующее немного короче предложенного вами «взлома» и предполагает, что вам не нужны такие версии, как 3.5.0b1.

pyenv install $(pyenv install --list | grep -v - | grep -v b | tail -1)

person John Kacz    schedule 29.10.2015
comment
Однако это не короче в каком-либо значимом смысле. Использование -v вместо --invert-match не очень важно. Да, у вас на одну трубу меньше, но вы также не удаляете начальные пробелы. Наконец, ваше решение не будет улавливать такие версии, как 3.5.0a1 (хотя я должен обновить свое, чтобы также улавливать b. - person user137369; 30.10.2015

Объединение этого с этим ответ, другой вариант:

pyenv install --list | grep --extended-regexp "^\s*[0-9][0-9.]*[0-9]\s*$" | tail -1

Регулярное выражение ищет строки, которые начинаются с числа ^[0-9], за которым следует любое количество точек и / или чисел [0-9.]*, и заканчиваются числом [0-9]$. Начальные ^\s* или завершающие \s*$ пробелы могут встречаться, но не обязательно.

Изменить: для установки:

pyenv install $(pyenv install --list | grep --extended-regexp "^\s*[0-9][0-9.]*[0-9]\s*$" | tail -1)
person Flo    schedule 28.01.2021
comment
Это не работает для заявленной цели. Попробуйте использовать это, чтобы установить последнюю версию напрямую (внутри pyenv install "$()", и это выдаст ошибку. - person user137369; 29.01.2021
comment
@ user137369 обновил ответ, работал у меня - person Flo; 29.01.2021

Потому что использование последней «стабильной» версии всего редко бывает хорошей идеей. У разных разработчиков апстрима разная концепция стабильного (мой маленький форк pymumble и eglibc имеют очень разные представления о качестве релиза). Новейшая стабильная версия часто содержит критические изменения, и часто не рекомендуется обновляться вслепую, не понимая, какие изменения вы вносите в свою кодовую базу.

В случае с Ruby потоки 1.8 были зелеными потоками, а потоки 1.9 были потоками ядра. Хотя они поддерживают один и тот же API, полное изменение базового модуля потоковой передачи, когда ваш язык поддерживает драгоценные камни C, неприемлемо ни в одной известной мне вселенной. Обновление любого многопоточного кода до последней стабильной версии Ruby, скорее всего, все сломает. У Arch Linux было аналогичное фиаско, когда он обновил всех до python 3, игнорируя бесчисленные зависимости своих собственных репозиториев от python 2.

Обычное решение - зависеть от репозитория вашего дистрибутива для новой версии python и использовать python virtualenv или python3 venv для создания сред, основанных на этой конкретной версии python.

person raylu    schedule 16.04.2015
comment
Я никогда не упоминал об обновлении. Мы говорим о первой команде, которую вы запускаете для первой настройки среды, и на тот момент мне нужна последняя версия. - person user137369; 17.04.2015
comment
Вы говорили об улучшении драгоценных камней / яиц. В любом случае обычный подход - просто использовать версию из репозитория вашего дистрибутива или сделать из нее venv. - person raylu; 17.04.2015
comment
Я использую OS X, а не дистрибутив Linux. Я упомянул обновление исключительно как пример другой задачи Python, которая излишне тупая по сравнению с ruby. - person user137369; 17.04.2015
comment
Хорошо, но вы, конечно же, согласны с тем, что обе проблемы, с которыми вы сталкиваетесь, проистекают из одного и того же различия в философии. - person raylu; 17.04.2015