ПРЕДУПРЕЖДЕНИЕ: для истории IPython требуется SQLite, ваша история не будет сохранена

Привет, я использую Ubuntu release 12.10 (квантовый) 32-разрядный с Linux Kernel 3.5.0-21-generic. Я пытаюсь заставить IPython History работать. Я установил его с помощью pythonbrew и виртуальной среды. Там я использую pip для установки IPython. В настоящее время, когда я запускаю IPython в терминале, я получаю:

WARNING: IPython History requires SQLite, your history will not be saved
Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython features.
%quickref -> Quick reference.
help      -> Python own help system.
object?   -> Details about 'object', use 'object??' for extra details.

Поиск по предупреждению в первой строке, я нашел этот выпуск, поэтому я вернулся и установил следующее:

sudo apt-get install libsqlite0 libsqlite0-dev libsqlite3-0 libsqlite3-dev

а затем удалите и переустановите pysqlite, используя pip

pip uninstall pysqlite
pip install pysqlite

После этого я решил проверить установку, импортировав модуль:

Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named _sqlite3

Итак, теперь файл _sqlite3.so кажется невозможным. Это когда я нашел этот SO вопрос. Либо это не существует, либо нет в моей переменной среды PYTHONPATH. Поиск файла, я получаю:

$ locate _sqlite3.so
/home/me/Desktop/.dropbox-dist/_sqlite3.so
/home/me/epd/lib/python2.7/lib-dynload/_sqlite3.so
/usr/lib/python2.7/lib-dynload/_sqlite3.so

Итак, файл есть, но когда я посмотрел на свой путь к python:

import sys
for p in sys.path:
    print p

ни один из вышеперечисленных путей, содержащих _sqlite3.so, не содержался в моем PYTHONPATH. Для хихиканья я добавил путь /usr/lib/python 2.7/lib-dynload к моему PYTHONPATH в терминале, а затем попытался снова импортировать sqlite3:

Python 2.7.3 (default, Nov  8 2012, 18:25:10) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/usr/lib/python2.7/lib-dynload")
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/home/me/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: /usr/lib/python2.7/lib-dynload/_sqlite3.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8

О, о. Теперь я полностью застрял. Может кто-нибудь мне помочь? Я также читал в нескольких местах, что мне, возможно, придется перестроить Python. Я не знаю, как это сделать в pythonbrew. Может ли кто-нибудь указать мне в правильном направлении?

Ответ 1

Благодаря minrk для указания меня в правильном направлении. Все, что мне нужно было, это перестроить python. Я изложил следующие шаги для тех, кто использует pythonbrew. Обратите внимание, что я уже установил пакет libsqlite3-dev в разделе вопросов.

Во-первых, при загрузке правильной версии загружаемого python и виртуальной среды выполните команду:

$ pip freeze -l > requirements.txt

Это дает нам список текстовых файлов всех пакетов пакетов, которые были установлены в виртуальной среде для этой конкретной версии python в pythonbrew. Затем мы удаляем версию python из pythonbrew и переустанавливаем ее (это шаг "rebuild python" ):

$ pythonbrew uninstall 2.7.3
$ pythonbrew install 2.7.3

После этого мы переключаемся на недавно установленную версию python 2.7.3 и создаем новую виртуальную среду (которую я назвал "sci" ):

$ pythonbrew switch 2.7.3
$ pythonbrew venv create sci
$ pythonbrew venv use sci

В идеале вы должны иметь возможность запускать команду:

$ pip install -r requirements.txt

и в соответствии с этим pip должен переустановить все модули, которые у вас были в виртуальной среде, прежде чем мы скроем эту версию python (2.7.3). Для меня это не сработало по какой-либо причине, поэтому я вручную установил все модули, используя индивидуальность pip.

$ ipython --pylab

Python 2.7.3 (default, Jan  5 2013, 18:48:27) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython features.
%quickref -> Quick reference.
help      -> Python own help system.
object?   -> Details about 'object', use 'object??' for extra details.

и история IPython работает!

Ответ 2

Я также прочитал в нескольких местах, что мне, возможно, придется перестроить Python.

Это правильно. SQLite является частью стандартной библиотеки, и создается при компиляции Python. Есть несколько "необязательных" частей стандартной библиотеки, которую Python просто пропустит (с минимальным предупреждением, к сожалению) если во время сборки отсутствуют зависимости, а sqlite является одним из них. Вы должны просто установить libsqlite3-dev, затем перестройте Python, и вы должны быть установлены. Следите за сообщениями сборки, поскольку они сообщают, какие модули они пропускают из-за отсутствия зависимостей.

Ответ 3

Что сработало для меня (используя osx + homebrew + пивоваренный питон):

# Reinstall Python 2.7 with sqlite
brew remove python
brew install readline sqlite gdbm --universal
brew install python --universal --framework

# Reinstall iPython with correct bindings
pip uninstall ipython    
pip install ipython

И вам должно быть хорошо идти.

Ответ 4

Вы должны восстановить свой питон с поддержкой sqlite

sudo apt-get install libsqlite3-dev
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
tar -xvf Python-2.7.15.tgz
cd Python-2.7.15
./configure
make
sudo make install

Создайте заново свою виртуальную среду, и вы должны быть готовы

rmvirtualenv venv
mkvirtualenv -p python2 venv
workon venv
pip install -r requirements.txt
# or
pip install ipython

Ответ 5

Это предупреждение появляется в macOS, когда python установлен вместе с pyenv. По умолчанию он устанавливает Python без sqlite. Эти команды переустанавливают python с поддержкой sqlite:

pyenv uninstall 3.7
CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.7