Предупреждение: история IPython требует SQLite, ваша история не будет сохранена

Привет я использую Ubuntu release 12.10 (quantal) 32-бит с ядром Linux 3.5.0-21-generic. Я пытаюсь заставить историю IPython работать. Я установил его с помощью 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's features.
%quickref -> Quick reference.
help      -> Python's 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.так что его не найти. Вот тогда я и нашел это так вопрос. Либо он не существует, либо его нет в моей переменной среды 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.так было и в моем PYTHONPATH. Для хихиканья я добавил path/usr/lib / python2.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. Кто-нибудь может указать мне правильное направление?

4 ответов


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

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


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

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

$ pip freeze -l > requirements.txt

это дает нам список текстовых файлов всех пакетов pip, которые были установлены в виртуальной среде для этого конкретного выпуска python в pythonbrew. Затем мы удаляем версию python из pythonbrew и переустанавливаем ее (это шаг" перестроить 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's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

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


что сработало для меня (используя osx + homebrew + brewed python):

# 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

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


вы должны перестроить свой python с поддержкой 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