@Zadavatel_Voprosov

Не получается собрать Python 3.7 из официальных исходников?

Всем добра и привет! Хочу себе поставить "Змею" поновее, а именно 3.7 (т.к. кое-кто из семейства оконных не хочет работать). Скачиваю сначала исходники с сайта, делаю sudo make altinstall и тут ошибка.
Бегу на официальные доки, качаю CPython с GitHub, компилю, и на том же моменте та же самая ошибка. Что делать (подскажите пжлст)?
Ой, вот ошибка:
running install_scripts
copying build/scripts-3.7/idle3.7 -> /usr/local/bin
copying build/scripts-3.7/pydoc3.7 -> /usr/local/bin
copying build/scripts-3.7/pyvenv-3.7 -> /usr/local/bin
copying build/scripts-3.7/2to3-3.7 -> /usr/local/bin
changing mode of /usr/local/bin/idle3.7 to 755
changing mode of /usr/local/bin/pydoc3.7 to 755
changing mode of /usr/local/bin/pyvenv-3.7 to 755
changing mode of /usr/local/bin/2to3-3.7 to 755
rm /usr/local/lib/python3.7/lib-dynload/_sysconfigdata_m_linux_x86_64-linux-gnu.py
rm -r /usr/local/lib/python3.7/lib-dynload/__pycache__
/usr/bin/install -c -m 644 ./Misc/python.man \
	/usr/local/share/man/man1/python3.7.1
if test "xupgrade" != "xno"  ; then \
	case upgrade in \
		upgrade) ensurepip="--altinstall --upgrade" ;; \
		install|*) ensurepip="--altinstall" ;; \
	esac; \
	 ./python -E -m ensurepip \
		$ensurepip --root=/ ; \
fi
Traceback (most recent call last):
  File "/home/timosha/cpython-3.7/Lib/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/timosha/cpython-3.7/Lib/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/timosha/cpython-3.7/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/home/timosha/cpython-3.7/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/home/timosha/cpython-3.7/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/home/timosha/cpython-3.7/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal
  File "/tmp/tmpv8cl2p7b/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/__init__.py", line 42, in <module>
  File "/tmp/tmpv8cl2p7b/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/cmdoptions.py", line 16, in <module>
  File "/tmp/tmpv8cl2p7b/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/index.py", line 25, in <module>
  File "/tmp/tmpv8cl2p7b/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/download.py", line 39, in <module>
  File "/tmp/tmpv8cl2p7b/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
  File "/home/timosha/cpython-3.7/Lib/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
Makefile:1132: ошибка выполнения рецепта для цели «altinstall»
make: *** [altinstall] Ошибка 1
P.S.: Все команды выполнялись от имени root'а (sudo) _-| Ubuntu 16.04.4 LTS |-_
  • Вопрос задан
  • 4619 просмотров
Решения вопроса 2
sim3x
@sim3x
Гайд
Как установить питон, требуемой версии одному пользователю в домашнюю директорию

Вам не нужно менять системный питон
Никогда

Запускать так python3.7 -v
Не так python3 -v
Почему? which python3.7; which python3

Что требуется поставить для сборки в убунтах 16.хх-18.хх
apt-get install -y \
  build-essential git libexpat1-dev libssl-dev zlib1g-dev \
  libncurses5-dev libbz2-dev liblzma-dev \
  libsqlite3-dev libffi-dev\
  libffi-dev tcl-dev linux-headers-generic libgdbm-dev \
  libreadline-dev tk-dev \
  libdb-dev \
  libmpdec-dev \
  libncursesw5-dev




Получаем исходники и чекаутим нужную версию
cd /tmp
git clone https://github.com/python/cpython.git
cd cpython
git checkout 3.7


Обращаем внимание
Не --prefix=$HOME/.local/bin а --prefix=$HOME/.localИнсталлер создаст такие диры ${prefix}/{bin,include,lib,share}
Сделайте tree .local до и после make install, тогда не возникнет вопросов, что поставил питон

Перед любой операцией - требуется читать ман!
./configure --help
Например если предполагается собирать разные варианты питона --with-lto может сильно ускорить процесс

-j4 повесит сборку на 4 ядра, если они у вас конечно есть

./configure --prefix=$HOME/.local --enable-optimizations
make -j4
make install


инсталлер формирует такую структуру для питона
Перед установкой, желательно руками удалить все. Не директории. В данной директории может быть много софта
.local
├── bin
│   ├── 2to3 -> 2to3-3.7
│   ├── 2to3-3.7
│   ├── easy_install-3.7
│   ├── idle3 -> idle3.7
│   ├── idle3.7
│   ├── pip3
│   ├── pip3.7
│   ├── pydoc3 -> pydoc3.7
│   ├── pydoc3.7
│   ├── python3 -> python3.7
│   ├── python3.7
│   ├── python3.7-config -> python3.7m-config
│   ├── python3.7m
│   ├── python3.7m-config
│   ├── python3-config -> python3.7-config
│   ├── pyvenv -> pyvenv-3.7
│   └── pyvenv-3.7
├── include
│   └── python3.7m
├── lib
│   ├── libpython3.7m.a
│   ├── pkgconfig
│   └── python3.7
│   └── man


Если после инстала и сборки which python3.7не дает результата - проверьте наличие в PATH ~./local/bin
$ grep "$HOME/.local/bin:" <<< "$PATH"  
/home/sim3x/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
Ответ написан
@Zadavatel_Voprosov Автор вопроса
Ура, благодаря sim3x c toster'а и MaxU с stackoverflow я поставил Python 3.7.0 в Ubuntu 16.04(.4) LTS. Теперь я просто обязан сделать мини гайд.
Для установки Python из исходников надо:
openssl (libssl-dev), zlib1g-dev и libffi-dev (я ставил всё через synaptic, так проще).
После того, как установили это всё, идём на GitHub за сурсами CPython'а (это интерпретатор Python'а). Я скачал версию 3.7 (выбрав её в Branch'ах или по тегу).
Распаковываем архив (желательно в раздел home).
Заходим в консоль и переходим в папку из архива -> timosha@timosha-UbuntuPC:~$ cd cpython-3.7
Потом ->
sudo ./configure --prefix=$HOME/.local --enable-optimizations

Ждём, пока процесс не завершится.
После того, как всё закончилось -> sudo make.
Когда всё закончилось, то возможно, что Python уже установился. Откроем ещё окно терминала и проверяем -> python3.7 -V. Если говорит, что не найден пакет, то переходим в окно терминала, где собирался Python и пишем -> sudo make install (в папке cpython-3.7).
Теперь всё должно заработать, проверяем! -> python3.7 -V.
Должно выдать: Python 3.7.0+.
Поздравляем, у Вас Python новой версии :).
Pip доступен по команде -> python3.7 -m pip


Ещё один не менее полезный гайдик.
Вопрос на stackoverflow.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lega
Инструкция как в несколько шагов установить и собрать deb пакет питона, который в дальнейшем можно без проблем ставить на другие хосты. + можно будет удалить/обновить через dpkg.
Актуальна для всех версий питона и Ubuntu 12/14/16 (просто подставляете правильный линк).

Так же можете использовать любой питон через докер:
docker run -it python:3.7
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы