【问题标题】:GCC error in python virtual environment in dockerdocker中python虚拟环境中的GCC错误
【发布时间】:2019-05-13 07:17:34
【问题描述】:

我有一个 docker 文件,我在其中在 python 2.7.15 中创建一个虚拟环境并为我的项目安装所有必需的 python 依赖项。

某些依赖项需要 gcc 才能像 pandas 一样编译,lz4 .. 失败并出现以下错误,

 pandas/io/sas/sas.c:4:20: fatal error: Python.h: No such file or directory
     #include "Python.h"
                        ^
    compilation terminated.
    error: command 'gcc' failed with exit status 1

即使我厌倦了在 docker 中安装 python-devel 和 gcc。但没有帮助。

RUN yum install -y python-pip python-devel gcc

Dockerfile:

FROM registry-access-redhat-com.repo.lab.pl.*-*.com/rhel7.5

# CONFIGURE YUM
RUN rm -f /etc/yum.repos.d/*
ADD resources/yum.repos.d/* /etc/yum.repos.d/
RUN echo "sslverify=false" >> /etc/yum.conf

# INSTALL REQUIRED SYSTEM PACKAGES 
RUN yum install -y python-pip python-devel gcc && yum clean all && rm -rf /var/cache/yum
RUN yum install -y wget && yum clean all && rm -rf /var/cache/yum && wget http://repo.lab.pl.alcatel-lucent.com/eden-yum-releases/installation-packages-rpm/python-2.7.15-2.x86_64.rpm

RUN yum install -y python-2.7.15-2.x86_64.rpm && yum clean all && rm -rf /var/cache/yum

#DOWNLAOD LATEST PIP
RUN wget -P /tmp/ https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl

#INSTALL PIP ON PYTHON 2.7.15
RUN LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install --find-links /tmp --upgrade --no-index /tmp/pip-18.1-py2.py3-none-any.whl

# CREATE foo GROUP AND USER
RUN groupadd foo
RUN useradd -d /home/foo -ms /bin/bash -g foo foo

# SETUP BASHRC for foo user
COPY file/.bashrc /home/foo
COPY file/.bash_profile /home/foo
RUN chown foo:foo /home/foo/.bash_profile
RUN chown foo:foo /home/foo/.bashrc

# SET WORKING DIRECTORY TO /home/foo
WORKDIR /home/foo

#CREATE VIRTUAL ENVIRONMENT
RUN wget -P /tmp/ https://files.pythonhosted.org/packages/e7/16/da8cb8046149d50940c6110310983abb359bbb8cbc3539e6bef95c29428a/setuptools-40.6.2-py2.py3-none-any.whl
RUN wget -P /tmp/ https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl
RUN LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install --find-links /tmp --upgrade --no-index /tmp/virtualenv-16.1.0-py2.py3-none-any.whl
RUN LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install --find-links /tmp --upgrade --no-index /tmp/setuptools-40.6.2-py2.py3-none-any.whl
RUN LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/virtualenv -p /usr/local/bin/python2.7 enet
RUN chown -R foo:foo /home/foo/enet
RUN export LD_LIBRARY_PATH=/usr/local/lib
RUN source /home/foo/enet/bin/activate
RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install --find-links /tmp --upgrade --no-index /tmp/pip-18.1-py2.py3-none-any.whl

RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install scipy
RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install openpyxl
RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install confluent-kafka

RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install cython

RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install pandas

RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install lz4

我该如何解决这个问题。

【问题讨论】:

  • 你也可以发布你的 Dockerfile 吗?
  • 尝试安装特定的开发包yum install python27-devel,以防万一。
  • 为什么需要在 Docker 容器中使用虚拟环境?
  • 我还建议删除shell dotfiles;他们提出了几个 SO 问题,并且不会按照您的预期工作。 (docker run ... myapp 根本不启动 shell。)

标签: python docker gcc pip virtualenv


【解决方案1】:

我猜你应该:

  1. 安装 python 开发文件(按照评论中的建议)。
  2. 在gcc 命令行中使用-I 开关来指向python 包含文件的正确路径。

【讨论】:

  • 并按照上面的 vivekyad4v 建议安装带有标题的开发人员包。
  • @binarym 我尝试使用 pip 包含头文件。但仍然不起作用RUN LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install --global-option=build_ext --global-option="-I/usr/include/python2.7" --global-option="-L/usr/local/lib" pandas。如何使用 gcc。我不知道这一点。 Python.h 文件位于/usr/include/python2.7 下
  • 当我将 LD_LIBRARY PATH 更改为 /usr/include/python2.7。 pandas 模块安装成功,但不是我的 virtualenv 路径。 RUN LD_LIBRARY_PATH=/usr/local/lib /home/foo/enet/bin/python2.7 /tmp/pip-18.1-py2.py3-none-any.whl/pip install pandas。它正在安装/usr/lib64
  • 我猜问题是你指定了-I/usr/include/python2.7,但你的python安装在/usr/local下...注意LD_LIBRARY_PATH是指定动态库的路径,不包括文件;-)您必须正确设置两者 LD_LIBRARY_PATH 和-I。
猜你喜欢
  • 2020-11-19
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2020-09-02
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多