web-dev-qa-db-ja.com

virtualenv内で「pip install lxml」が機能しないのはなぜですか?

注:私はvirtualenvwrapperを使用しています。

仮想環境をアクティブ化する前に:

$ pip install lxml
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages  
Cleaning up...  

仮想環境をアクティブにした後:

(test-env)$ pip install lxml
force/build/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: 
libxml/xmlversion.h: No such file or directory

compilation terminated.

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /home/chaz/dev/envs/test-with-system-python-force/bin/python2
.7 -c "import setuptools;__file__='/home/chaz/dev/envs/test-with-
system-python-force/build/lxml/setup.py';exec(compile(open(__file__).
read().replace('\r\n', '\n'), __file__, 'exec'))" install --record 
/tmp/pip-bJ6Q_B-record/install-record.txt --single-version-externally
-managed --install-headers /home/chaz/dev/envs/test-env/include/site/python2.7 failed with error code 1 in 
/home/chaz/dev/envs/test-env/build/lxml
Storing complete log in /home/chaz/.pip/pip.log
69
Brian Dant

システムにすでにlxmlがインストールされている可能性があります。おそらく、システムパッケージが原因でインストールされています。したがって、最初の試行(pip install lxmlアクティブなvirtualenvなし)は失敗しませんが、インストールもしません。それは本当に何もしません。

Virtualenvでは、デフォルトでシステムパッケージは無視されます。したがって、pipはlxmlがインストールされていないと判断します。したがって、仮想環境にインストールしようとします。

lxmlには、適切にインストールするためにコンパイルする必要があるCモジュールが含まれています。ただし、これらのCモジュールのコンパイルは、いくつかの「開発ライブラリ」がすでにインストールされていることにも依存しています。これらの開発ライブラリはPythonではなくCライブラリであるため、pipはそれらをインターネットから自動的に取得してインストールすることはできません。

したがって、これらの開発ライブラリを自分でインストールする必要があります。ほとんどの場合、パッケージマネージャーを使用します。 Debianシステム(Ubuntuなど)では、これは...

apt-get install libxml2-dev libxslt-dev

これにより、libxml2およびlibxslt開発ライブラリがローカルシステムにインストールされます。 lxmlを再度インストールしようとすると、これらの開発ライブラリがシステム上にあるため、Cモジュールのコンパイル手順が機能するはずです。

受け取っていたエラーメッセージは、これらのライブラリが欠落していたためです(libxml/xmlversion.h: No such file or directoryエラーメッセージの一部)。

参照: buntuにlxmlをインストールする方法

124
Mark Hildreth

centosユーザーの場合:取得時:

エラー:コマンド 'gcc'が終了ステータス1で失敗しました

行う:

Sudo yum install libxslt-devel libxml2-devel
18
elad silver

システムレベルでlxmlがインストールされており、--system-site-packagesで作成しなかったvirtualenvに移行する場合は、virtualenvにシンボリックリンクできます。 dist-packagesフォルダー。

virtualenvの外側、python Shell:

import lxml
print lxml.__file__

私の場合、/usr/lib/python2.7/dist-packagesにあります。 lxmlフォルダーとEgg-infoファイルがあります。 virtualenvがどこにあっても、/lib/python-x.y/dist-packagesフォルダーに移動し(dist-packagesを作成する必要がある場合があります)、ライブラリフォルダーとEggの両方をシンボリックリンクします。

5
David Oliver