lxml: error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
Question: I've seen some posts on lxml installing problems, but none of the answers I
found was of any help. Many said to install python-dev, libxml2 and libxslt to
solve the problem. They are already installed, but I still get the following
outcome (keep in mind that I'm installing everything locally using
virtualenv):

    
    
    (scrapers)~$ pip install lxml
    Downloading/unpacking lxml
      Downloading lxml-3.5.0.tar.gz (3.8MB): 3.8MB downloaded
      Running setup.py (path:/home/pigna/scrapers/build/lxml/setup.py) egg_info for package lxml
        Building lxml version 3.5.0.
        Building without Cython.
        Using build configuration of libxslt 1.1.28
    
        warning: no previously-included files found matching '*.py'
    Installing collected packages: lxml
      Running setup.py install for lxml
        Building lxml version 3.5.0.
        Building without Cython.
        Using build configuration of libxslt 1.1.28
        building 'lxml.etree' extension
        x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -Isrc/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
        x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt -lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so
        /usr/bin/ld: cannot find -lz
        collect2: error: ld returned 1 exit status
        error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
        Complete output from command /home/pigna/scrapers/bin/python -c "import setuptools, tokenize;__file__='/home/pigna/scrapers/build/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ikEzzn-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/pigna/scrapers/include/site/python2.7:
        Building lxml version 3.5.0.
    
    Building without Cython.
    
    Using build configuration of libxslt 1.1.28
    
    running install
    
    running build
    
    running build_py
    
    creating build
    
    creating build/lib.linux-x86_64-2.7
    
    creating build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/builder.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/cssselect.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/sax.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/__init__.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-2.7/lxml
    
    creating build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/__init__.py -> build/lib.linux-x86_64-2.7/lxml/includes
    
    creating build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/builder.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/diff.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/__init__.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/defs.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    copying src/lxml/html/clean.py -> build/lib.linux-x86_64-2.7/lxml/html
    
    creating build/lib.linux-x86_64-2.7/lxml/isoschematron
    
    copying src/lxml/isoschematron/__init__.py -> build/lib.linux-x86_64-2.7/lxml/isoschematron
    
    copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-2.7/lxml
    
    copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-2.7/lxml/includes
    
    copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-2.7/lxml/includes
    
    creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources
    
    creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
    
    copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
    
    creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
    
    copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
    
    copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
    
    creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    
    running build_ext
    
    building 'lxml.etree' extension
    
    creating build/temp.linux-x86_64-2.7
    
    creating build/temp.linux-x86_64-2.7/src
    
    creating build/temp.linux-x86_64-2.7/src/lxml
    
    x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -Isrc/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
    
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt -lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so
    
    /usr/bin/ld: cannot find -lz
    
    collect2: error: ld returned 1 exit status
    
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    
    ----------------------------------------
    Cleaning up...
    Command /home/pigna/scrapers/bin/python -c "import setuptools, tokenize;__file__='/home/pigna/scrapers/build/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ikEzzn-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/pigna/scrapers/include/site/python2.7 failed with error code 1 in /home/pigna/scrapers/build/lxml
    Storing debug log for failure in /home/pigna/.pip/pip.log
    

What does `warning: no previously-included files found matching '*.py'` mean?
`/usr/bin/ld: cannot find -lz` what is -lz? How to install it?


Answer: The relevant error is this:

    
    
    /usr/bin/ld: cannot find -lz
    

...which indicates that the linker couldn't find `libz.so`, which means you
don't have zlib installed in a location in your library search path.

Install zlib; the method for doing so depends on your operating system, so
there's no generic answer. It might be something like:

    
    
    sudo apt-get install zlib-dev   # on a Debian derivative
    sudo apt-get install zlib1g-dev # on Ubuntu 14.04 (see below)
    sudo yum install zlib-devel     # on a Red Hat derivative
    sudo port install zlib          # on a ports-based system
    sudo pacman -S zlib             # on Arch Linux
    

or any number of other things as appropriate.

* * *

Assuming you want to find the appropriate package name for a given version of
Ubuntu, one can [search for the package containing `libz.so` on
packages.ubuntu.com](http://packages.ubuntu.com/search?searchon=contents&keywords=libz.so&mode=exactfilename&suite=trusty&arch=any);
the linked results are for Trusty.

