First, I installed lxml without using pip (Python 2.7.2 on Mac OS 10.6.8). Then, I read this post and I installed it again using pip ( sudo pip install lxml
). I still had a problem:
I can import lxml ( import lxml
) but I cannot use from lxml import etree
. I have this error message:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so, 2): Symbol not found: _htmlParseChunk
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so
Then, I tried to install lxml from source following these instructions , and I have this error message:
checking whether we are cross compiling... configure: error: in `/Users/my_name/Applications/lxml/lxml-2.2.2/build/tmp/libxml2-2.7.8':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
Traceback (most recent call last):
File "setup.py", line 115, in <module>
STATIC_CFLAGS, STATIC_BINARIES),
File "/Users/my_name/Applications/lxml/lxml-2.2.2/setupinfo.py", line 50, in ext_modules
libxslt_version=OPTION_LIBXSLT_VERSION)
File "/Users/my_name/Applications/lxml/lxml-2.2.2/buildlibxml.py", line 198, in build_libxml2xslt
call_subprocess(configure_cmd, cwd=libxml2_dir, **call_setup)
File "/Users/my_name/Applications/lxml/lxml-2.2.2/buildlibxml.py", line 158, in call_subprocess
raise Exception('Command "%s" returned code %s' % (cmd_desc, returncode))
Exception: Command "./configure --without-python --disable-dependency-tracking --disable-shared --prefix=/Users/my_name/Applications/lxml/lxml-2.2.2/build/tmp/libxml2" returned code 1
Finally, I followed the second advise of this answer and I used the command line sudo STATIC_DEPS=true /usr/bin/easy_install-2.7 lxml
. It installed lxml on the Apple-supplied system Python 2.7, and not on the version I'm currently using. The positive point: if I run the Apple-Python, I can from lxml import etree
.
Negative point: I still don't know how to install lxml on another version of python. Any idea?
I'm currently using /Library/Frameworks/Python.framework/Versions/2.7/bin/python
.
You need to install a separate easy_install
for the version of Python you are using. See the answer here for more details. Then you can run the easy_install
command using it:
STATIC_DEPS=true easy_install-2.7 lxml
UPDATE: From your comments, you now are reporting a permission error showing yet another Python path, one that appears to be a MacPorts-installed Python: /opt/local/Library/Frameworks
. You need to figure out which Python you want to use. If, in fact, you want to use the MacPorts one, then simply install the MacPorts-provided lxml
port. That's the easiest solution.
$ sudo port selfupdate
$ sudo port install py27-lxml
Otherwise, you need to install easy_install
with the other (python.org?) Python 2.7.2. I would recommend to use Distribute
, the more modern fork of `setuptools' and you need to ensure you are using the right Python:
$ curl -O http://python-distribute.org/distribute_setup.py
$ export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
$ which python2.7 # should be in the path above
$ python2.7 distribute_setup.py
$ STATIC_DEPS=true easy_install-2.7 lxml
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.