Рубрики
Без рубрики

Компиляция Python от источника, для веселья и разочарования

В этой серии я документирую свой опыт с попыткой написать и выполнить машину обучения … Теги с Python, MachineLearning, ретро.

В этой серии я документирую свой опыт с попыткой написать и выполнить программу обучения машины ( любая программа обучения машины) в Python 1.6 на следующем эмуляторе оборудования, запущенного NextStep.

Как у последнего поста у нас есть:

  • Предыдущий, следующий эмулятор, вверх и работает.
  • NextStep 3.3 вверх и бежать.
  • Сервер NFS UP и работает, а следующая машина подключена к нему.
  • Окружающая среда разработчика NextStep установлена и функциональна.

Сейчас мы в точечном конце – пришло время попытаться скомпилировать Python 1.6 от источника.

Цель

Наша цель для этой сессии проста и ясна: компилируйте Python 1.6 от источника, и подтвердить работу интерпретатора.

Проблемы и решения

Получение источника

Исходный код для Python 1.6 на самом деле все еще доступен на Главный сайт Python , хотя сейчас не очень хорошо рекламируется.

Интересно, что Страница загрузки для Python 1.6 Имеет несколько сломанных HTML, и невозможно щелкнуть, чтобы согласиться с лицензионным соглашением. Тем не менее, Страница загрузки для Python 1.6.1 все еще функционирует, поэтому я пошел с этим.

Использование ранее установленных NFS, это было просто переместить источник Тарбол В предыдущий распаковать его и начните просматривать через readme.

Он всегда ценен, чтобы посмотреть на Readme.

Идти …

Отмечая через readme, я отмечаю, что есть специальные инструкции по установке для каждой платформы, в том числе следующей … Тем не менее, нет ничего, кроме заметок о «жировых двоичных файлах» (термин, который предложил Google от меня, но не намного больше).

Инструкции по сборке просты: во-первых, я просто должен запустить скрипт ./Configure. , Что я быстро делаю. Это проходит через огромное количество проверок, все из которых являются удовлетворительными:

И тогда мне просто нужно бежать ./сделать , который начинается сильно:

Посмотрите на эти компиляции летать!

… и останавливаясь …

Довольно быстро после компиляции он останавливается со следующей ошибкой:

Похоже, есть проблема с разработчиком NextStep предоставляется стандартной библиотечной реализацией библиотеки – по-видимому, они перемешивали в некоторых объектах-с. Это, возможно, не удивительно (Objective-C был первичным языком выбора для следующего, а для Apple Products из ОС X, до тех пор, пока Swift не пришел), но я немного удивлен, что это будет реализовано таким образом, чтобы потерпеть крах. Компиляция.

К счастью, исправление было предоставлено в сообщении об ошибке (это дружелюбно!) И что может быть реализовано в разделе «Параметры компилятора» в очень хорошо организованном Makefile С изменение

# Compiler options passed to subordinate makes
OPT=       -g -02 -OPT:0limit=0

к

# Compiler options passed to subordinate makes
OPT=       -g -02 -OPT:0limit=0 -ObjC

С этим изменением сделано, позвонив сделать Обжимает процесс компиляции наряду!

… и останавливаясь снова …

Однако это не длится. Как только мы доберемся до Модули Раздел процесса компиляции, он бомбы на ошибке компиляции – недостаточно аргументов для функции C, похоже,.

Я не страшно знаком с C с компиляцией C, поэтому я действительно придуму к обучению на этом, и я немного глубоко погрузись. После честного расследования я нахожу:

  • Что-то разбивается в _Locales модуль. Код вызывает strcoll И схватить, говоря, что не хватает аргументов. Это похоже на очень вопиющее надзору за разумно-зрелый на этот момент Python CodeBase, поэтому я посмотрите поближе.
  • В кодовой базе Python я нахожу линию, где она умирает, и подтвердить, что есть звонок для strcoll с двумя аргументами, S1 и S2 Отказ Вызов в _LocalModule. C совершенно нормально – полностью учебник! Это Внедрение болота. функции COG-стандартных C. Я тогда выкопал в
  • string.h Файл, установленный с помощью Developer NextStep, и это ... нечетное? Функция имеет совершенно другую подпись: int strcoll (char * to, size_t maxsize, const char * from) Это Maxsize Аргумент, кажется, выходит из ниоткуда, и отключает установку. Глядя на эту конкретную реализацию,
  • Только Ссылка я нахожу к этой подписи в книге «Программное обеспечение в C» , который отмечает, что он «документирует предлагаемый стандарт ANSI C, который, как ожидается, будет ратифицирован в 1987 году».
  • Я посмотрел на стандартную реализацию ANSI C strcoll и Maxsize нигде не было видно.

Или суммирование этих выводов в цепочке «Whys»:

Какое путешествие.

В целом, что-то здесь немного не поздравляет – я хотел бы узнать историю этой странной реализации, потому что я мог найти ничтожную в моем поиске.

Ограничение, но эффективный, обходной путь

Мышление там может быть решение в Readme, я вернулся и перечитал его. После чтения сверху вниз я нашел интересное сообщение для установки под SunOS 4.x:

При использовании стандартного компилятора «CC» определенные модули не являются коммутацией, потому что они используют синтаксис Non-K & R. Вы должны быть в состоянии получить базовый интерпретатор Python, комментируя такие модули в файле установки модулей/настройки, но я действительно рекомендую использовать GCC.

Это звучит хорошо. Мы, безусловно, получаем ошибки из-за нестандартного синтаксиса (хотя, возможно, не так, как они имели в виду).

Я бы ранее смотрел в GCC , но не смог найти невходящую предусмотренную реализацию для следующего. Тем не менее, «базовый переводчик Python», безусловно, может быть достаточным.

Конечно, я смог вскочить в Модули/настройки Файл и начать комментировать хлопотные модули, когда они обрезаются во время компиляции. (Интересно, кажется, что есть много предполагаемого изменения в каких модулях для установки на основе примечаний в этом файле.)

Это чувствует себя янки, но эффективно. Я могу только надеяться, что готовый продукт достаточно для моих потребностей.

Привет, сплетник

Медленно, но верно я добился прогресса, пока он не будет завершен: сделать Процесс RAN до завершения (примерно 1 час времени бесперебойного состава), и я встречаюсь с одним благословенным Python запускаемый файл.

Я бегу, и я встречаюсь с красивым видом переводчика Python (и одна незначительная ошибка):

[GCC NEXT DEVKIT на основе CPP 3.1] на Next3_3 – Я хотел бы подумать, что это компиляционное сообщение, которое не часто видно.

Я провел некоторые основные тесты, созданные и работали с различными типами данных – интерпретатор кажется хорошим и функциональным. Успех!

Что дальше?

С переводчиком Python UP и работает, единственное, что осталось сделать, это написать сценарий для изучения базового машины в середине 90-х годов ERA Python и претендовать на победу!

Серия Обзор

Где мы добились?

На данный момент у нас есть:

  • Скомпилирован предыдущий
  • Нашли заранее построенные изображения NextStep.
  • Успешно установлен и запустил изображение NextStep 3.3 Отказ
  • Установите FileShare, чтобы мы могли легко получить файлы в систему.
  • Нашел изображение The NextStep Developer Tools.
  • Установлены инструменты разработчика, у нас так есть возможность построить Python из источника.
  • Загрузил исходный код для Python 1.6 и передан его на следующую машину.
  • Составлена (хаки, слегка неполная) версия Python 1.6.

Как мы тут оказались?

В этой сете мы:

  • Вытащил исходный код Python 1.6.1 из Веб-сайт Python
  • Передано файлы на следующую машину через наши NFS
  • Нашел «обходной путь», хотя и ограничивающий один, для наших вопросов с компиляцией Python 1.6 от источника
    • Комментируя хлопотные модули из Модули/настройки Файл, мы можем прогрессировать и завершить компиляцию.

Что мы могли бы исследовать дальше?

  • Руководство для компиляции отметило, что удаление модулей может не понадобиться, если использование болота GCC Реализация, а не на следующей пользовательской версии. Это может быть полезно найти реализацию GCC для NextStep 3.3 – Я видел достаточно Rumblings на следующих форумах, чтобы подумать, что это возможно.
  • Доступны обновления для NextStep 3.3 и, потенциально The NextStep Developer CodeBase. Применение этих обновлений может помочь решить нестандартные библиотеки C.

Оригинал: “https://dev.to/goyder/compiling-python-from-source-for-fun-and-frustration-1f61”