我正在尝试将python软件包气流安装到已在docker容器内使用pipenv创建的virtualenv中。它失败并显示我不知道的错误。
这是我的Dockerfile:
FROM python:3.6-stretch
WORKDIR /tmp
# Define build args
ARG http_proxy
ARG https_proxy
ARG no_proxy
RUN apt-get update && \
apt-get -y install default-jdk
# Detect JAVA_HOME and export in bashrc.
# This will result in something like this being added to /etc/bash.bashrc
# export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
RUN echo export JAVA_HOME="$(readlink -f /usr/bin/java | sed "s:/jre/bin/java::")" >> /etc/bash.bashrc
# Upgrade pip
RUN pip install --upgrade pip
# Install core python packages
RUN pip install pipenv==2018.5.18
构建并运行:
docker build -t pipenvtest:latest .
docker run -it pipenvtest:latest bash
连接到容器时:
pipenv --python 2.7
pipenv install --dev airflow
哪个会因以下错误而失败:
建立'_yaml'扩展名
创建build / temp.linux-x86_64-2.7 / ext
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2 .7-2.7.13 =。 -fstack-protector-strong -Wformat -Werror = format-security -fPIC -I / usr / include / python2.7 -c ext / _yaml.c -o build / temp.linux-x86_64-2.7 / ext / _yaml.o
ext / _yaml.c:4:20:致命错误:Python.h:没有这样的文件或目录
#include“ Python.h”
^
编译终止。
错误:命令'x86_64-linux-gnu-gcc'失败,退出状态为1
(^实际上出现在它前面的行的末尾,但我不知道该如何格式化引用的文本)
我承认没有最微妙的想法来解决这个问题,所以希望有人能给我一些指导。希望我在此处提供的repro对您有用。
答案 0 :(得分:1)
是否打算使用--dev
中的pipenv install --dev airflow
开关?它也指示pipenv
安装Airflow的开发依赖项。这些依赖项之一需要Python.h
头文件(丢失)。解决问题的方法:
--dev
开关。libpython2.7-dev
软件包,该软件包
在安装Aiflow之前提供Pthon.h
:apt install libpython2.7-dev
答案 1 :(得分:1)
好的,我真的很傻。我试图在从python:3.6-stretch构建的映像上设置python2.7 virtualenv。
我改变了
pipenv --python 2.7
到
pipenv --python 3.6
它奏效了。