Вопрос или проблема
Я пытаюсь установить Python 3.10 с помощью pyenv, но установщик выдает ошибку, говоря, что зависимости не скомпилированы. Однако установщик также говорит, что python-build использует openssl, readline и ncurses из homebrew.
CPPFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix readline)/include -I$(xcrun -show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib"
pyenv install 3.10
python-build: используем openssl из homebrew
python-build: используем readline из homebrew
Скачиваем Python-3.10.15.tar.xz...
-> https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tar.xz
Установка Python-3.10.15...
python-build: используем tcl-tk из homebrew
python-build: используем readline из homebrew
python-build: используем ncurses из homebrew
python-build: используем zlib из xcode sdk
Ошибка трассировки (последний вызов был последним):
Файл "<строка>", строка 1, в <модуле>
Файл "/Users/quan.nguyen/.pyenv/versions/3.10.15/lib/python3.10/curses/__init__.py", строка 13, в <модуле>
from _curses import *
ModuleNotFoundError: Нет модуля с именем '_curses'
ПРЕДУПРЕЖДЕНИЕ: Расширение Python curses не было скомпилировано. Нет библиотеки ncurses?
Ошибка трассировки (последний вызов был последним):
Файл "<строка>", строка 1, в <модуле>
ModuleNotFoundError: Нет модуля с именем 'readline'
ПРЕДУПРЕЖДЕНИЕ: Расширение Python readline не было скомпилировано. Нет библиотеки GNU readline?
Ошибка трассировки (последний вызов был последним):
Файл "<строка>", строка 1, в <модуле>
Файл "/Users/quan.nguyen/.pyenv/versions/3.10.15/lib/python3.10/ssl.py", строка 99, в <модуле>
import _ssl # если мы не можем его импортировать, пусть ошибка распространяется
ModuleNotFoundError: Нет модуля с именем '_ssl'
ОШИБКА: Расширение Python ssl не было скомпилировано. Нет библиотеки OpenSSL?
Пожалуйста, обратитесь к странице вики, чтобы устранить проблему.
https://github.com/pyenv/pyenv/wiki/Common-build-problems
СБОРКА ПРОВАЛИЛАСЬ (OS X 15.0 с использованием python-build 2.4.13)
Просмотрите или очистите рабочую директорию по адресу /var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/python-build.20240919150807.79066
Результаты записаны в /var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/python-build.20240919150807.79066.log
Последние 10 строк лога:
$ensurepip --root=/ ; \
fi
Ищем по ссылкам: /var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/tmpklg5hx7t
Обработка /private/var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/tmpklg5hx7t/setuptools-65.5.0-py3-none-any.whl
Обработка /private/var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/tmpklg5hx7t/pip-23.0.1-py3-none-any.whl
Установка собранных пакетов: setuptools, pip
ПРЕДУПРЕЖДЕНИЕ: Скрипты pip3 и pip3.10 установлены в '/Users/quan.nguyen/.pyenv/versions/3.10.15/bin', который не находится в PATH.
Рассмотрите возможность добавления этой директории в PATH или, если вы предпочитаете подавить это предупреждение, используйте --no-warn-script-location.
ЗАМЕТКА: Текущий PATH содержит пути, начинающиеся с `~`, которые могут не быть расширены всеми приложениями.
Успешно установлены pip-23.0.1 setuptools-65.5.0
❯ pyenv doctor
Клонирование /Users/quan.nguyen/.pyenv/plugins/pyenv-doctor/bin/.....
Установка python-pyenv-doctor...
python-build: используем tcl-tk из homebrew
python-build: используем readline из homebrew
python-build: используем ncurses из homebrew
python-build: используем zlib из xcode sdk
СБОРКА ПРОВАЛИЛАСЬ (OS X 15.0 с использованием python-build 2.4.13)
Просмотрите или очистите рабочую директорию по адресу /var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/python-build.20240919153937.2140
Результаты записаны в /var/folders/f_/_mwchwz12xzbycp94nqvbdv5s9_ljk/T/python-build.20240919153937.2140.log
Последние 10 строк лога:
проверка имени выходного файла по умолчанию для C компилятора... a.out
проверка суффикса исполняемых файлов...
проверка, производим ли мы кросс-компиляцию... нет
проверка суффикса объектных файлов... o
проверка, используем ли мы компилятор GNU C... да
проверка, принимает ли clang -g... да
проверка, есть ли у clang опция для принятия ISO C89... ничего не требуется
проверка rl_gnu_readline_p в -lreadline... нет
configure: ошибка: GNU readline не установлен.
make: *** Не указаны цели и не найден makefile. Остановка.
Проблемы, обнаруженные при проверке системы.
Смотрите https://github.com/pyenv/pyenv/wiki/Common-build-problems для известных решений.
Я пытался заглянуть на страницу Common build problems
и добавил флаги согласно инструкции. Не знаю, куда еще обратиться.
Ответ или решение
Чтобы успешно установить Python 3.10 с помощью pyenv, вам необходимо убедиться, что все необходимые зависимости (такие как OpenSSL, readline, ncurses и другие) установлены и правильно настроены. В вашем случае ошибка указывает на то, что модули _curses
, readline
, и _ssl
не были скомпилированы, что говорит о проблемах с их зависимостями.
Вот шаги, которые помогут вам решить данную проблему:
1. Убедитесь, что Homebrew актуален
Сначала проверьте, что у вас последняя версия Homebrew, выполнив команду:
brew update
2. Установите необходимые зависимости
Вам нужно установить или переустановить зависимости, указанные в ошибках. Введите следующие команды в терминале:
brew install openssl readline ncurses zlib
3. Настройте переменные окружения
Настройки CPPFLAGS
и LDFLAGS
должны указывать на директории, где Homebrew установил зависимости. Выполните следующие команды, чтобы установить переменные окружения правильно:
export CPPFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix readline)/include -I$(brew --prefix ncurses)/include"
export LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix ncurses)/lib -L$(brew --prefix zlib)/lib"
4. Очистите кэш pyenv
Иногда pyenv может хранить временные файлы, которые вызывают сбой установки. Для этого выполните:
pyenv uninstall 3.10.15
5. Переустановите Python с pyenv
После всех подготовительных шагов Попробуйте снова установить Python 3.10:
pyenv install 3.10.15
6. Проверьте установку
После установки проверьте, работает ли Python корректно и все необходимые модули установлены:
pyenv global 3.10.15
python -c "import curses; import readline; import ssl"
Если эти команды выполняются без ошибок, то установка прошла успешно.
7. Проблемы с PATH
Если у вас все еще возникают проблемы, также убедитесь, что директория pyenv добавлена в ваш PATH
. Вы можете сделать это, добавив следующую строку в ваш файл конфигурации оболочки (например, ~/.bash_profile
или ~/.zshrc
):
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
Затем перезагрузите терминал или выполните source ~/.bash_profile
или source ~/.zshrc
.
Заключение
Если после выполнения этих шагов и установки зависимостей у вас все еще возникают проблемы, возможно, стоит обратить внимание на log-файлы установки, которые указаны в выводе ошибок (/var/folders/.../python-build.log
). Эти файлы могут содержать более детальную информацию о том, где именно возникли проблемы.
Если проблемы сохраняются, пожалуйста, предоставьте дополнительную информацию о выводе команд и любых ошибках, которые вы получаете.