How To Install Lxml On Ubuntu: "Xslt-Config: Not Found" Error?

Published July 30, 2024

Problem: Installing lxml on Ubuntu

When you try to install lxml on Ubuntu, you might see the error "xslt-config: not found". This error usually happens when your system is missing XSLT development libraries. This prevents lxml, a library for processing XML and HTML in Python, from installing correctly.

Solution: Installing Required Dependencies

Installing Development Packages

To fix the "xslt-config: not found" error, install the required development packages. Open a terminal and run this command:

sudo apt-get install libxml2-dev libxslt1-dev

This command installs the development files for libxml2 and libxslt. lxml needs these packages to compile and link against the XML and XSLT libraries. Without these files, lxml cannot access the required headers and libraries during installation.

Tip: Verify Installation

After installing the development packages, you can verify their installation by running:

dpkg -s libxml2-dev libxslt1-dev | grep Status

If both packages are installed correctly, you should see "Status: install ok installed" for each.

Installing Python Development Files

You also need to install the Python development files. Use this command:

sudo apt-get install python-dev

The python-dev package is needed for building Python extensions like lxml. It provides the header files and static libraries required when compiling Python C extensions. Without python-dev, you may face compilation errors when trying to install lxml or other Python packages with C extensions.

Installing Lxml After Resolving Dependencies

Using Pip to Install Lxml

After installing the required dependencies, you can now install lxml using pip. Open a terminal and run this command:

pip install lxml

Pip is a tool for installing Python packages. It manages dependencies, handles version conflicts, and helps install, upgrade, or remove packages. Using pip to install lxml helps you get the latest version compatible with your Python installation.

Tip: Specify Python Version

If you have multiple Python versions installed, you can specify which version to use by replacing 'pip' with 'python -m pip'. For example:

python3 -m pip install lxml

This ensures you're installing lxml for the correct Python version.

Verifying the Installation

To check if lxml is installed correctly, you can follow these steps:

  1. Open a Python interpreter by typing python in your terminal.

  2. Try importing lxml:

import lxml

If no error occurs, lxml is installed correctly.

  1. To test lxml's functionality, you can try a simple XML parsing operation:
from lxml import etree

root = etree.Element("root")
child = etree.SubElement(root, "child")
child.text = "Hello, lxml!"

print(etree.tostring(root, pretty_print=True).decode())

This code creates a simple XML structure and prints it. If you see the XML output without errors, lxml is working as expected.

If you have issues during these steps, make sure you have followed all the previous installation steps correctly.

Alternative Solutions

Using Ubuntu's Package Manager

You can install lxml using Ubuntu's package manager. Open a terminal and run this command:

sudo apt-get install python3-lxml

This method installs a pre-compiled version of lxml that's compatible with your Ubuntu system.

Pros of using the system package manager:

  • Simple installation process
  • Automatic dependency resolution
  • Consistent with your system's package management

Cons of using the system package manager:

  • The version might not be the latest
  • Less control over compilation options
  • Possible conflicts with other Python environments

Building Lxml from Source

If you need a specific lxml version or want more control over the installation, you can build lxml from source. Here are the steps:

  1. Download the lxml source code:

    wget https://github.com/lxml/lxml/archive/lxml-4.9.2.tar.gz
    tar xzf lxml-4.9.2.tar.gz
    cd lxml-lxml-4.9.2
  2. Install build dependencies:

    sudo apt-get install build-essential python3-dev python3-setuptools
  3. Build and install lxml:

    python3 setup.py build
    sudo python3 setup.py install

Consider building from source when:

  • You need a specific lxml version not available through package managers
  • You want to apply custom patches or changes
  • You're working in an environment where you need to compile against specific library versions

Example: Custom Build Flags

When building lxml from source, you can use custom build flags to optimize for your system. For example:

CFLAGS="-O2 -march=native" python3 setup.py build
sudo python3 setup.py install

This command uses the -O2 optimization level and optimizes for the current CPU architecture.