
Ich versuche, ein Python-Modul namens „ lxml
Mein Konto“ auf einem Supercomputer mit RHEL zu installieren.
Ich tueNICHTüber Root-Zugriff oder Superuser-Status verfügen.
lxml
erfordert die Entwicklungs-/Entwicklungsversionen von libxml2
und libxslt
, da diese Header-Dateien enthalten, die lxml
erstellt werden müssen. Der Supercomputer hat jedoch die Nicht-Entwicklungsversionen in seinen Stammverzeichnissen installiert /usr
, daher habe ich die Entwicklungsversionen in meinem home
Verzeichnis installiert, indem ich sie aus dem Quellcode erstellt habe.
Beide wurden reibungslos und ohne Fehler erstellt und alle notwendigen Header-Dateien befinden sich in $HOME/usr/local/include/libxml2/libxml
usw.
Allerdings versucht es jedes Mal , das nicht-dev. & im Stammverzeichnis pip install lxml
zu verwenden :libxml2
libxslt
/bin
[myusername@q0144 ~]$ pip install --install-option="--prefix=$HOME/python_modules" lxml
... (some unimportant messages) ...
Building against libxml2/libxslt in the following directory: /usr/local/lib
building 'lxml.etree' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/local/include/libxml2 -I/tmp/pip_build_myusername/lxml/src/lxml/includes -I/N/soft/rhel6/python/2.7.3/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
In file included from src/lxml/lxml.etree.c:346:
/tmp/pip_build_myusername/lxml/src/lxml/includes/etree_defs.h:9:31: error: libxml/xmlversion.h: No such file or directory
/tmp/pip_build_myusername/lxml/src/lxml/includes/etree_defs.h:11:4: error: #error the development package of libxml2 (header files etc.) is not installed correctly
...(many more lines saying that the headers are missing, etc.)
Und es gibt mehrere Dutzend weitere Zeilen, die besagen, dass die Entwicklungspakete nicht richtig installiert sind, da die falschen angezeigt werden.
Wie bringe ich das System dazu, die von mir installierten Versionen von libxml2
/ zu verwenden?libxslt
Ich gebe für meine Verzeichnisse $HOME/bin
, $HOME/usr
, usw. sogar zuerst .cshrc
.
Um sicherzugehen, dass ich alle Voraussetzungen erfüllte, habe ich auch versucht, die Datei lxml
aus dem Quellcode zu erstellen. Dabei habe ich die Anweisungen im build.txt
Dokument befolgt, das im Quell-Tarball enthalten ist:
[myusername@q0144 lxml-3.3.5]$ python setup.py build_ext -i -I $HOME/usr/include/libxml2/libxml --without-cython --with-xslt-config=$HOME/usr/local/bin/xslt-config
Building lxml version 3.3.5.
Building without Cython.
Using build configuration of libxslt 1.1.28
Building against libxml2/libxslt in the following directory: /usr/local/lib
/N/soft/rhel6/python/2.7.3/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
warnings.warn(msg)
running build_ext
building 'lxml.etree' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/include/libxml2 -I/N/hd00/myusername/Quarry/python_modules/lxml-3.3.5/src/lxml/includes -I/N/u/myusername/Quarry/usr/include/libxml2/libxml -I/N/soft/rhel6/python/2.7.3/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
In file included from src/lxml/lxml.etree.c:346:0:
/N/hd00/rccaton/Quarry/python_modules/lxml-3.3.5/src/lxml/includes/etree_defs.h:
13:32: fatal error: libxslt/xsltconfig.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1
Ich habe also grundsätzlich das gleiche Problem, wenn es sich die Verzeichnisse „+“ /user/local/lib
und nicht „+“ ansieht .$HOME/user
Wie kann ich das umgehen?
Antwort1
Stellen Sie sicher, dass bin
sich Unterverzeichnisse beider Pakete (libxml2/libxslt) auf Ihrem befinden PATH
. Sie enthalten *-config
Skripte, die während der Kompilierung von lxml verwendet werden, um herauszufinden, wo libxml2/libxslt installiert wurden.
[pdobrogost@host /]$ echo $PATH
(...):/opt/libxslt-1.1.27/bin:/opt/libxml2-2.6.32/bin:(...)
[pdobrogost@host /]$ which xml2-config && which xslt-config
/opt/libxml2-2.6.32/bin/xml2-config
/opt/libxslt-1.1.27/bin/xslt-config