#pyenv #macos-big-sur
#pyenv #macos-биг-сур
Вопрос:
Это лишь частично связано с # 1737
Я только что обновился до новой MAC OS BigSur.
Я установил бета-версию XCode 12.3 и настроил ее с помощью инструментов командной строки 12.3 beta.
Если я сделаю:
$ CFLAGS=»-I $(brew —prefix openssl)/include -I $(brew —prefix bzip2)/include -I $(brew —prefix readline)/include -I $(xcrun —show-sdk-path)/usr/включить » LDFLAGS=»-L $(brew —префикс openssl)/ lib -L $(brew —префикс readline) /lib -L $ (brew —префикс zlib) / lib -L $(brew —префикс bzip2) / lib» pyenv install —patch 3.8.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch?full_index=1 ) в соответствии с инструкциямиэтот блог: https://dev.to/kojikanao/install-python-3-8-0-via-pyenv-on-bigsur-4oee Это работает.
Однако я начал использовать pyenv после того, как нашел очень привлекательный способ управления многими окружениями python с помощью автоматической активации, как описано в этом блоге : https://glhuilli.github.io/virtual-environments.html
С тех пор, как я обновился, я не смог заставить это работать.
Вопросы:
- Когда я захожу в каталог с .python-version и .python-virtualenv, скрипт предлагает мне создать новую среду с помощью pyenv install. Это приводит к ошибке ./Modules/pwdmodule.c. Как я могу изменить приведенный выше сценарий, чтобы создать среду с использованием .python-version и .python-virtualenv? Очевидно, я могу предоставить другую версию python в скрипте, но как насчет имени виртуальной среды? Как я могу это включить?
- Я хочу, чтобы содержимое новой виртуальной среды находилось в каталоге, в котором вызывается pyenv, а не /Users/username/.pyenv. Как это можно сделать? я уверен, что другие сталкиваются с подобными проблемами. Будут ли они исправлены в конце концов? В идеале, я хотел бы иметь возможность просто выполнить установку pyenv и готово…
Заранее спасибо.
Комментарии:
1. Это сработало для меня: dev.to/lgw4 /…
2. Спасибо! Это очень помогло.
Ответ №1:
Итак, о вопросе 1: ответ заключается в том, что pyenv install
он не будет работать в данный момент. Однако, пока pyenv version
установлено требуемое, скрипт будет работать как шарм. Поэтому вам придется установить его другим способом (не с pyenv install
помощью).
Пример: Предположим, вам предоставлены два файла:
.python-vesion
.python-virtualenv
соответственно, инкапсулирование: 3.8.2
и test-venv
. Затем просто запустите:
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include"
LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib"
pyenv install --patch $(head -n 1 .python-version) < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch?full_index=1)
Это должно успешно установить a pyenv
для 3.8.2.
Тогда просто сделайте:
pyenv virtualenv $(head -n 1 .python-virtualenv)
Затем, если вы запустите:
$ pyenv virtualenvs
3.8.2/envs/test-venv (created from /Users/{your-pc-name}/.pyenv/versions/3.8.2)
test-venv (created from /Users/{your-pc-name}/.pyenv/versions/3.8.2)
вы подтвердите, что новая среда была создана.
О вопросе 2: Вот обновленный скрипт:
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# Automatic venv activation
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
# Undo any existing alias for `cd`
unalias cd 2>/dev/null
# Method that verifies all requirements and activates the virtualenv
hasAndSetVirtualenv() {
# .python-version is mandatory for .python-virtualenv but not vice versa
if [ -f .python-virtualenv ]; then
if [ ! -f .python-version ]; then
echo "To use .python-virtualenv you need a .python-version"
return 1
fi
fi
# Check if pyenv has the Python version needed.
# If not (or pyenv not available) exit with code 1 and the respective instructions.
if [ -f .python-version ]; then
if [ -z "`which pyenv`" ]; then
echo "Install pyenv see https://github.com/yyuu/pyenv"
return 1
elif [ -n "`pyenv versions 2>amp;1 | grep 'not installed'`" ]; then
# Message "not installed" is automatically generated by `pyenv versions`
echo 'run "pyenv install"'
return 1
fi
fi
# Create and activate the virtualenv if all conditions above are successful
# Also, if virtualenv is already created, then just activate it.
if [ -f .python-virtualenv ]; then
VIRTUALENV_NAME="`cat .python-virtualenv`"
PYTHON_VERSION="`cat .python-version`"
MY_ENV=$PYENV_ROOT/versions/$PYTHON_VERSION/envs/$VIRTUALENV_NAME
([ -d $MY_ENV ] || virtualenv $MY_ENV -p `which python`) amp;amp;
source $MY_ENV/bin/activate
fi
}
pythonVirtualenvCd () {
# move to a folder run the pyenv virtualenv script
cd "$@" amp;amp; hasAndSetVirtualenv
}
# Every time you move to a folder, run the pyenv virtualenv script
alias cd="pythonVirtualenvCd"