13
votes

I am having trouble installing lxml to my Mac OS. I am having the following error when building it. This is the error I have when using pip install lxml

/private/var/folders/9s/s5hl5w4x7zjdjkdljw9cnsrm0000gn/T/pip-build-khuevu/lxml/src/lxml/includes/etree_defs.h:9:10: fatal error: 'libxml/xmlversion.h' file not found

I have installed libxml2 with brew:

brew install libxml2
brew link libxml2 --force

I'm new to Mac. In Ubuntu, it would mean libxml2-dev package must be installed.

Updated: here is the pip.log:

"~/.pip/pip.log" 124L, 8293C requirement_set.install(install_options, global_options, root=options.root_path) File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/req.py", line 1185, in install requirement.install(install_options, global_options, *args, **kwargs) File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/req.py", line 592, in install cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False) File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/util.py", line 662, in call_subprocess % (command_desc, proc.returncode, cwd)) InstallationError: Command /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -c "import setuptools;file='/private/var/folders/9s/s5hl5w4x7zjdjkdljw9cnsrm0000gn/T/pip-build-khuevu/lxml/setup.py';exec(compile(open(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /var/folders/9s/s5hl5w4x7zjdjkdljw9cnsrm0000gn/T/pip-nsV0iT-record/install-record.txt --single-version-externally-managed failed with error code 1 in /private/var/folders/9s/s5hl5w4x7zjdjkdljw9cnsrm0000gn/T/pip-build-khuevu/lxml

Any idea ? Thanks a lot

6
Is there an error message in ~/.pip/pip.log? After installing libxml2 with brew, do you see the correct header files in /usr/include/libxml2/libxml? Are the libxml2 headers definitely on your path?ChrisP
@ChrisP, I updated my question with the log. There is no /usr/include folder in my machine.Khue Vu
Hopefully someone comes along who knows what's up. My only recommendation right now is to make sure the libxml2 headers are accessible via PATH. Homebrew should install to /usr/local, which is on PATH by default. Can you find the xmlversion.h file on your machine, just to make sure it's there? If you keep having trouble, I recommend the Enthought Python distribution, which comes with many hard to build tools (including lxml) by default. I know that doesn't solve your exact problem.ChrisP
Thanks @ChrisP. It is true that the file is not in the path for compilation even though I have a version of libxml installed by Brew, and a version installed with Xcode. Both are in PATH. I will update the answer below.Khue Vu

6 Answers

22
votes

Turn out xmlversion.h is not included in compilation path even though it is in PATH. Modify the C_INCLUDE_PATH env fix the error for me:

C_INCLUDE_PATH=/usr/local/Cellar/libxml2/2.9.1/include/libxml2:$C_INCLUDE_PATH

21
votes

If you are running Mavericks with Xcode installed, you can also use:

export C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/libxml2:$C_INCLUDE_PATH
6
votes

I have Python and libxml installed via brew, this worked for me after trying everything above:

sudo mkdir /usr/include # If /usr/include is missing
sudo ln -s /usr/local/Cellar/libxml2/2.9.2/include/libxml2 /usr/include/libxml2

Note: You'll need to check your own paths for latest versions.

Since the headers are available elsewhere, and being looked for in a particular directory (spotted in the command calling clang to compile) - and for some reason the alternate place is not being picked up, I made a softlink to the right place.

5
votes

None of the other answers (exporting C_INCLUDE_PATH) worked for me. However, setting the CFLAGS environment variable to the built-in OS X 10.10 libxml2 root worked like a charm.

export CFLAGS=-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2
4
votes
brew install libxml2
brew link libxml2 --force
export C_INCLUDE_PATH=/usr/local/Cellar/libxml2/2.9.2/include/libxml2:$C_INCLUDE_PATH
1
votes

there is something with the permission to mkdir in /usr/ when the system is Mac EI captain. Maybe we can not modify this directory?

See What is the “rootless” feature in El Capitan, really? on AskDifferent