【问题标题】:Cannot import lxml in python:3.4 docker container无法在 python:3.4 docker 容器中导入 lxml
【发布时间】:2015-10-22 01:38:01
【问题描述】:

很可能是由于资源限制,我无法在基于 python:3.4 的 docker 容器中安装(并因此构建)lxml。

因此,我改为安装该软件包。我的 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

不幸的是,我无法import lxml,即使只是在我的容器中运行 Python,如下所示:

***@*****:/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'
>>>

如何解决?

【问题讨论】:

    标签: python python-3.x docker lxml


    【解决方案1】:

    您的问题是您使用的是python 映像,它将Python 从源代码 安装到/usr/local。然后,您尝试使用系统包管理器apt-get 安装lxml 模块。这将安装lxml,它对/usr/bin/ 中的系统 Python 可见,但/usr/local 中源安装的Python 可见。你有几个选择:

    • 不要尝试将 Python 包管理器 (pip) 与系统包管理器混用。只需pip install 一切。我已经尝试过了,令我惊讶的是我可以成功pip install lxml(我没想到所有构建依赖项都已经到位,但显然它们已经到位)。

    • 不要费心使用python 图像。只需从您最喜欢的发行版(Fedora、Ubuntu 等)开始,然后使用系统包管理器:

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

      对于最近的 Ubuntu 映像,这将为您提供 Python 3.4.2(注意:称为 python3),这与安装在 python 映像上的 3.4.3 相比只是一个小版本。

    【讨论】:

    • 太好了,感谢您提供的信息丰富的回复。我不得不向 Dockerfile (apt-getting python3-pip) 添加一些命令,但现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 2015-03-13
    • 1970-01-01
    • 2012-08-17
    • 2019-07-31
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多