В этой серии я документирую свой опыт с попыткой написать и выполнить программу обучения машины ( любая программа обучения машины) в 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”