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

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

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

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

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

  • Есть ли способ узнать, какие модули будут отсутствовать до создания 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 name.

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

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

Я попытался импортировать их, но все равно "no named module 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  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. Я нашел include/sqlite3.h. Поэтому я вернулся и проверил /usr/include/. Я могу найти только sqlite3.h.

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


3RD EDIT Я начал все заново, за исключением того, что я не переустанавливал 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)

сборки/temp.linux-i686-2.7/дома/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/python 27, используя стандартный макет 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 и сделав повторную запись.

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

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

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

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

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

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

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