lxml install on windows 7 using pip and python 2.7
Question: When I try to upgrade lxml using pip on my windows 7 machine I get the log
printed below.

When I uninstall and try to install from scratch I get the same errors. Any
ideas?

> Downloading/unpacking lxml from
> <https://pypi.python.org/packages/source/l/lxml/l>
> xml-3.2.4.tar.gz#md5=cc363499060f615aca1ec8dcc04df331 Downloading
> lxml-3.2.4.tar.gz (3.3MB): 3.3MB downloaded Running setup.py egg_info for
> package lxml Building lxml version 3.2.4. Building without Cython. ERROR:
> Nazwa 'xslt-config' nie jest rozpoznawana jako polecenie wewnętrzne l ub
> zewnętrzne, program wykonywalny lub plik wsadowy.
>  
>  
>     ** make sure the development packages of libxml2 and libxslt are
> installed *
>  
>
> *
>  
>  
>     Using build configuration of libxslt
>     D:\software\Python27\lib\distutils\dist.py:267: UserWarning: Unknown
> distrib ution option: 'bugtrack_url'
>       warnings.warn(msg)
>  
>     warning: no files found matching 'lxml.etree.c' under directory
> 'src\lxml'
>     warning: no files found matching 'lxml.objectify.c' under directory
> 'src\lxm l'
>     warning: no files found matching 'lxml.etree.h' under directory
> 'src\lxml'
>     warning: no files found matching 'lxml.etree_api.h' under directory
> 'src\lxm l'
>     warning: no files found matching 'etree_defs.h' under directory
> 'src\lxml'
>     warning: no files found matching '*.txt' under directory
> 'src\lxml\tests'
>     warning: no files found matching 'pubkey.asc' under directory 'doc'
>     warning: no files found matching 'tagpython*.png' under directory 'doc'
>     warning: no files found matching 'Makefile' under directory 'doc'
> Installing collected packages: lxml   Found existing installation:
>  
>
> lxml 2.3 Uninstalling lxml: Successfully uninstalled lxml Running setup.py
> install for lxml Building lxml version 3.2.4. Building without Cython.
> ERROR: Nazwa 'xslt-config' nie jest rozpoznawana jako polecenie wewnętrzne l
> ub zewnętrzne, program wykonywalny lub plik wsadowy.
>  
>  
>     ** make sure the development packages of libxml2 and libxslt are
> installed *
>  
>
> *
>  
>  
>     Using build configuration of libxslt
>     building 'lxml.etree' extension
>     D:\software\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD
> /W3  /GS- /DNDEBUG
>  
>
> -Ic:\users\x\appdata\local\temp\pip_build_x\lxml\src\lxml\inc ludes
> -ID:\software\Python27\include -ID:\software\Python27\PC /Tcsrc\lxml\lxml.
> etree.c /Fobuild\temp.win32-2.7\Release\src\lxml\lxml.etree.obj lxml.etree.c
> c:\users\x\appdata\local\temp\pip_build_x\lxml\src\lxml\includes\etree_d
> efs.h(9) : fatal error C1083: Cannot open include file:
> 'libxml/xmlversion.h': N o such file or directory
> D:\software\Python27\lib\distutils\dist.py:267: UserWarning: Unknown distrib
> ution option: 'bugtrack_url' warnings.warn(msg) error: command
> '"D:\software\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' fai led with exit
> status 2 Complete output from command D:\software\Python27\python.exe -c
> "import setu ptools;**file**
> ='c:\users\x\appdata\local\temp\pip_build_x\lxml\setu
> p.py';exec(compile(open(**file**).read().replace('\r\n', '\n'), **file** ,
> 'exec' ))" install --record c:\users\x\appdata\local\temp\pip-pyyuss-
> record\install-r ecord.txt \--single-version-externally-managed: Building
> lxml version 3.2.4.
>
> Building without Cython.
>
> ERROR: Nazwa 'xslt-config' nie jest rozpoznawana jako polecenie wewnętrzne
> lub z ewnętrzne,
>
> program wykonywalny lub plik wsadowy.
>
> ** make sure the development packages of libxml2 and libxslt are installed
> **
>
> Using build configuration of libxslt
>
> running install
>
> running build
>
> running build_py
>
> creating build
>
> creating build\lib.win32-2.7
>
> creating build\lib.win32-2.7\lxml
>
> copying src\lxml\builder.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\cssselect.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\doctestcompare.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\ElementInclude.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\pyclasslookup.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\sax.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml\usedoctest.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml_elementpath.py -> build\lib.win32-2.7\lxml
>
> copying src\lxml__init__.py -> build\lib.win32-2.7\lxml
>
> creating build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes__init__.py -> build\lib.win32-2.7\lxml\includes
>
> creating build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\builder.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\clean.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\defs.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\diff.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\ElementSoup.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\formfill.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\html5parser.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\soupparser.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html\usedoctest.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html_diffcommand.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html_html5builder.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html_setmixin.py -> build\lib.win32-2.7\lxml\html
>
> copying src\lxml\html__init__.py -> build\lib.win32-2.7\lxml\html
>
> creating build\lib.win32-2.7\lxml\isoschematron
>
> copying src\lxml\isoschematron__init__.py ->
> build\lib.win32-2.7\lxml\isoschema tron
>
> copying src\lxml\lxml.etree.h -> build\lib.win32-2.7\lxml
>
> copying src\lxml\lxml.etree_api.h -> build\lib.win32-2.7\lxml
>
> copying src\lxml\includes\c14n.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\config.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\dtdvalid.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\etreepublic.pxd ->
> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\htmlparser.pxd ->
> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\relaxng.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\schematron.pxd ->
> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\tree.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\uri.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xinclude.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xmlerror.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xmlparser.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xmlschema.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xpath.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\xslt.pxd -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\etree_defs.h -> build\lib.win32-2.7\lxml\includes
>
> copying src\lxml\includes\lxml-version.h ->
> build\lib.win32-2.7\lxml\includes
>
> creating build\lib.win32-2.7\lxml\isoschematron\resources
>
> creating build\lib.win32-2.7\lxml\isoschematron\resources\rng
>
> copying src\lxml\isoschematron\resources\rng\iso-schematron.rng ->
> build\lib.win 32-2.7\lxml\isoschematron\resources\rng
>
> creating build\lib.win32-2.7\lxml\isoschematron\resources\xsl
>
> copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl ->
> build\lib.win32-2 .7\lxml\isoschematron\resources\xsl
>
> copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl ->
> build\lib.win32-2 .7\lxml\isoschematron\resources\xsl
>
> creating build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-
> schematron-xsl t1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-
> xslt1\iso_abstract_e xpand.xsl ->
> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-schematron -xslt1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-
> xslt1\iso_dsdl_inclu de.xsl ->
> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-schematron-xs lt1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-
> xslt1\iso_schematron _message.xsl ->
> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-schemat ron-xslt1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-
> xslt1\iso_schematron _skeleton_for_xslt1.xsl ->
> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\ iso-schematron-xslt1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-
> xslt1\iso_svrl_for_x slt1.xsl ->
> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-schematron- xslt1
>
> copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt
> -> build\lib.win32-2.7\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
>
> running build_ext
>
> building 'lxml.etree' extension
>
> creating build\temp.win32-2.7
>
> creating build\temp.win32-2.7\Release
>
> creating build\temp.win32-2.7\Release\src
>
> creating build\temp.win32-2.7\Release\src\lxml
>
> D:\software\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3
> /GS \- /DNDEBUG
> -Ic:\users\x\appdata\local\temp\pip_build_x\lxml\src\lxml\include s
> -ID:\software\Python27\include -ID:\software\Python27\PC
> /Tcsrc\lxml\lxml.etre e.c
> /Fobuild\temp.win32-2.7\Release\src\lxml\lxml.etree.obj
>
> lxml.etree.c
>
> c:\users\x\appdata\local\temp\pip_build_x\lxml\src\lxml\includes\etree_defs.
> h(9) : fatal error C1083: Cannot open include file: 'libxml/xmlversion.h':
> No su ch file or directory
>
> D:\software\Python27\lib\distutils\dist.py:267: UserWarning: Unknown
> distributio n option: 'bugtrack_url'
>
> warnings.warn(msg)
>
> error: command '"D:\software\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"'
> failed with exit status 2
>
> \---------------------------------------- Rolling back uninstall of lxml
> Cleaning up... Command D:\software\Python27\python.exe -c "import
> setuptools;**file** ='c:\user
> s\x\appdata\local\temp\pip_build_x\lxml\setup.py';exec(compile(open(_ _file_
> _).read().replace('\r\n', '\n'), **file** , 'exec'))" install --record c:\u
> sers\x\appdata\local\temp\pip-pyyuss-record\install-record.txt \--single-
> versio n-externally-managed failed with error code 1 in
> c:\users\x\appdata\local\temp \pip_build_x\lxml Traceback (most recent call
> last): File "D:\software\Python27\Scripts\pip-script.py", line 9, in
> load_entry_point('pip==1.4.1', 'console_scripts', 'pip')() File
> "D:\software\Python27\lib\site-packages\pip__init__.py", line 148, in ma in
> return command.main(args[1:], options) File "D:\software\Python27\lib\site-
> packages\pip\basecommand.py", line 169, in main text =
> '\n'.join(complete_log) UnicodeDecodeError: 'ascii' codec can't decode byte
> 0xa9 in position 72: ordinal not in range(128)


Answer: If you have a compiler installed (tested with VS C++ 2008 Express), you can
simply run:

`set STATICBUILD=true && pip install lxml `

As pointed out [on documentation](http://lxml.de/build.html#static-linking-on-
windows), setting `STATICBUILD` will tell to lxml's installer to automatically
download all its binary dependencies before build.

These `lxml` binary dependencies, that should be present when installing from
source, will be downloaded and build together by the installer:

  * libxslt
  * iconv
  * zlib
  * libxml2

**Bonus** : It also works inside a virtualenv.

