Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot import lxml in python:3.4 docker container

Most probably due to resource constraints, I am unable to pip install (and hence build) lxml within a python:3.4 based docker container.

I'm therefore installing the package instead. My Dockerfile:

FROM python:3.4
COPY ./ /source
RUN apt-get update
RUN apt-get install -y python3-lxml
RUN pip install -r /source/requirements.txt

Unfortunately, I am unable to import lxml, even when simply running Python in my container, like so:

***@*****:/web/source# docker exec -i -t 84c4cbf09321 python
Python 3.4.3 (default, May 26 2015, 19:20:24)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'lxml'
>>>

How can this be resolved?

like image 425
LaundroMat Avatar asked Jul 19 '26 11:07

LaundroMat


1 Answers

Your problem is that you are using the python image, which installs Python from source into /usr/local. You are then trying to install the lxml module using the system package manager, apt-get. This installs lxml where it will be visible to the system Python in /usr/bin/, but not to the source-installed Python in /usr/local. You have a few choices:

  • Don't try to mix the Python package manager (pip) with the system package manager. Just pip install everything. I've tried, and much to my surprise I can successfully pip install lxml (I wasn't expecting all the build dependencies to be in place but apparently they are).

  • Don't bother using the python image. Just start with your favorite distribution (Fedora, Ubuntu, whatever) and use the system package manager:

    FROM ubuntu
    RUN apt-get install -y python3-lxml
    

    With recent Ubuntu images this will get you Python 3.4.2 (NB: called python3), which is only a minor revision away from the 3.4.3 installed on the python image.

like image 88
larsks Avatar answered Jul 22 '26 02:07

larsks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!