Сборка Python и многое другое на отсутствующих модулях

У меня есть другой поток, просящий помощи на "отсутствующем zlib". С милой помощью проблема была решена (почти).

Теперь я заинтересован в создании Python самостоятельно (на Ubuntu 10.10).

Несколько важных вопросов привлекли мое внимание:

  1. После сборки Python (скажем, 2.7.1) нужно ли перестраивать Python, если у меня отсутствуют модули?

  2. Есть ли способ узнать, какие модули будут отсутствовать до сборки Python? Скажи sqlite3. У меня установлен sqlite3 для системы по умолчанию (Python 2.6.6), и я могу импортировать ее в оболочку Python 2.6.6. Теперь я использую pythonbrew для сборки 2.7.1, и в оболочке я не могу импортировать sqlite3, потому что _sqlite3 недоступен. Я уверен, что есть еще несколько важных, которые мне не нужны для будущего развития (например, Django..).

Я готов научиться строить без использования pythonbrew.

Пожалуйста, поделитесь со мной своим опытом создания другой версии Python, и как бы вы решили проблему отсутствия модулей? Есть ли практическое решение для сборки Python?

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


РЕДАКТИРОВАТЬ

Сначала я благодарю вас за ваш вклад. Они много значат. Я сделал здание.

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _curses            _curses_panel   
_tkinter           bsddb185           bz2             
dbm                gdbm               readline        
sunaudiodev        _sqlite3                                    
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

Я получил sqlite3 и прочитал

sudo apt-get install libreadline6 libreadline6-dev
sudo apt-get install libsqlite3-dev

Я попытался импортировать их, но все еще "без имени модуля xxxx".

В AskUbuntu я фактически спрашивал людей, как получить предыдущие команды, потому что я не мог использовать эту функцию, когда нахожусь в оболочке Python 2.7.1. Я считаю, что это связано с readline. Readline

Я установил Python-2.7.1 в этот каталог: /home/jwxie518/python27/

Я посмотрел в setup.py, я нашел следующие строки:

# The sqlite interface
sqlite_setup_debug = False   # verbose debug prints from this script?

# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                   ]

Все перечисленные пути не существуют. Таким образом, я думаю, я должен установить sqlite3 вручную? У меня есть другая ссылка здесь (это на китайском, однако)

# Download the latest and extract
# Go into the extracted directory
./configure --prefix=/home/jwxie518/python27/python
make && make install
# Then edit python-2.7 's setup.py before rebuild it
# Sample (add these two lines to the end....)
'~/share/software/python/sqlite-3.6.20/include',
'~/share/software/python/sqlite-3.6.20/include/sqlite3',

# Then rebuild python like how we did before

Я вошел в мой каталог, где я установил sqlite3. Я нашел включить / sqlite3.h только. Поэтому я вернулся и проверил / usr / include /. Я тоже могу найти только sqlite3.h.

и так, что здесь происходит? Readline также не импортируется.


3-е РЕДАКТИРОВАНИЕ Я начал все сначала, кроме как я не переустановил sqlite3.

# Extract Python-2.7.1
# cd into Python-2.7.1
# ./configure
make >make.out 2>&1
less make.out

make.out находится здесь: http://pastebin.com/raw.php?i=7k3BfxZQ

Я все еще не мог импортировать sqlite3. Итак, я пошел в setup.py и внес изменения:

# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                     '/home/jwxie518/python-mod/include/sqlite',
                     '/home/jwxie518/python-mod/include/sqlite3',
                   ]

С другой стороны, все побежал (на этот раз я тоже сделал чистым)

Вывод здесь: http://pastebin.com/raw.php?i=8ZKgAcWn

Согласно выводу, я не думаю, что пользовательский путь включен.... (для полного вывода, пожалуйста, перейдите по ссылке выше и найдите sqlite)

build / temp.linux-i686-2.7 / home / jwxie518 / Python-2.7.1 / модули /_sqlite/util.o -L/usr/lib -L/usr/local/lib -Wl,-R/usr/lib -lsqlite3 -o build/lib.linux-i686-2.7/_sqlite3.so

Я до сих пор не могу импортировать sqlite3.

Спасибо!


Большое спасибо, Майкл Диллон, за помощь. Ваш урок был аккуратным и понятным.

Я решил проблему, как только понял, что всякий раз, когда я пробовал Python-2.7.1, я фактически использовал тот, который был установлен Pythonbrew.

Мораль этой истории - прочитать все ошибки. Я пренебрег ошибками, сгенерированными при импорте sqlite3. На тот, который установлен Pythonbrew, не было установлено sqlite3. Пакет разработки для sqlite3 был установлен после того, как Pythonbrew установил Python-2.7.1

Благодарю.

1 ответ

Решение

Вот как собрать Python и исправить любые зависимости. Я предполагаю, что вы хотите, чтобы этот Python был полностью отделен от Python для Ubuntu, поэтому я указываю опцию --prefix, чтобы установить все это в /home/python27, используя стандартную компоновку Python, то есть пакеты сайтов вместо dist- пакеты.

1. Get the .tar.gz file into your own home directory.
2. tar zxvf Py*.tar.gz
3. cd Py*1
4. ./configure --prefix=/home/python27
5. make
6. make install

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

a. sudo apt-get install something-dev
b. make

Довольно часто возникает проблема, потому что вы пропускаете надстройку -dev для какого-либо модуля или другого. Но иногда вы должны начать сначала:

a. make clean
b. ./configure --prefix=/home/python27
c. make

Начинать заново никогда не повредит, если вы не уверены. Важное замечание по поводу шага 6. Я не использую sudo в этой команде, что означает, что вам нужно иметь каталог /home/python27, уже созданный с соответствующим владельцем.

Не стесняйтесь попробовать ./configure --help |less перед созданием чего-либо, потому что могут быть интересные варианты, которые вы могли бы использовать. Однажды в минимальном дистрибутиве мне пришлось сделать --with-dbmliborder=gdbm:bdb, чтобы заставить работать gdbm. Когда вы запустите./configure, последние несколько строк сообщат вам, куда он поместил информацию, которую он изучил. В случае с Python, модули / установки были полезны, чтобы выяснить, как получить модуль для сборки.

Еще одна полезная вещь, чтобы make clean а потом беги make >make.out 2>&1 захватить весь вывод из полного процесса сборки. Затем, после его завершения, используйте less или редактор для поиска деталей о проблемном модуле, таком как _sqlite. Например, проверьте все опции -I, которые передаются gcc, Если правильного каталога include нет в списке, это может вызвать проблемы. Вы можете редактировать setup.py изменить список включаемых каталогов.

В прошлом было более распространено иметь проблемы с библиотекой, которые можно было бы исправить, выйдя из системы, войдя снова и выполнив команду "sudo ldconfig" перед выполнением полной перестройки.

Другие вопросы по тегам