15

こんにちは私はLinuxカーネル3.5.0-21-genericでUbuntuリリース12.10(クォンタル)32ビットを使用しています。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

次に、pipを使用してpysqliteを削除して再インストールしました

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に含まれていませんでした。笑いの場合は、ターミナルのPYTHONPATHにパス/usr/lib/python2.7/lib-dynloadを追加してから、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

5 に答える 5

17

また、Pythonを再構築しなければならない可能性があることをいくつかの場所で読みました。

正解です。SQLiteは標準ライブラリの一部であり、Pythonをコンパイルするときに構築されます。標準ライブラリにはいくつかの「オプション」の部分があり、ビルド時に依存関係が欠落している場合、Pythonは(残念ながら最小限の警告で)スキップします。sqliteはその1つです。インストールしてからPythonを再構築するだけlibsqlite3-devで、設定が完了します。依存関係が欠落しているためにスキップしているモジュールが報告されるため、ビルドメッセージに注意してください。

于 2013-01-05T21:06:05.380 に答える
8

私を正しい方向に向けてくれたminrkに感謝します。私がしなければならなかったのは、Pythonを再構築することだけでした。pythonbrewを使用している場合の手順の概要を以下に示します。libsqlite3-dev質問セクションですでにパッケージをインストールしていることに注意してください。

まず、適切なバージョンのPythonと仮想環境をロードして、次のコマンドを実行します。

$ pip freeze -l > requirements.txt

これにより、pythonbrewのこの特定のpythonリリースの仮想環境にインストールされているすべてのpipパッケージのテキストファイルリストが表示されます。次に、pythonbrewからpythonのバージョンを削除して再インストールします(これは「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の歴史は機能します!

于 2013-01-06T04:39:40.540 に答える
4

私のために働いたもの(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

そして、あなたは行ってもいいはずです。

于 2013-11-12T11:04:00.010 に答える
3

sqliteサポートを使用してPythonを再構築する必要があります

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
于 2018-06-13T08:46:42.143 に答える
3

この警告は、Pythonがpyenvとともにインストールされている場合にmacOSに表示されます。デフォルトでは、sqliteなしでpythonをインストールします。これらのコマンドは、sqliteをサポートするPythonを再インストールします。

pyenv uninstall 3.7
CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.7
于 2019-06-13T08:44:14.223 に答える