ПРЕДУПРЕЖДЕНИЕ: для истории 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