使用 pipenv 时气流安装失败
airflow install fails when using pipenv
我正在尝试将 python 软件包 airflow 安装到 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
失败并出现此错误:
building '_yaml' extension
creating 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: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
(^ 实际上出现在它前面一行的末尾,但我不知道如何格式化引用的文本)
我承认我对如何解决这个问题一无所知,所以希望有人能给我一些指示。我希望我在这里包含的复制品对你有用。
pipenv install --dev airflow
中的 --dev
开关是有意的吗?它也指示 pipenv
安装 Airflow 的开发依赖项。这些依赖项之一需要 Python.h
头文件(缺少)。解决问题:
- 如果你不需要开发依赖的话
删除
--dev
开关。
- 如果您需要开发
dependencies 然后安装
libpython2.7-dev
包,它
提供Pthon.h
,安装Aiflow前:apt install libpython2.7-dev
好吧,我真的很蠢。我试图在从 python:3.6-stretch.
构建的图像上设置 python2.7 virtualenv
我改了
pipenv --python 2.7
至
pipenv --python 3.6
成功了。
我正在尝试将 python 软件包 airflow 安装到 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
失败并出现此错误:
building '_yaml' extension
creating 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: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
(^ 实际上出现在它前面一行的末尾,但我不知道如何格式化引用的文本)
我承认我对如何解决这个问题一无所知,所以希望有人能给我一些指示。我希望我在这里包含的复制品对你有用。
pipenv install --dev airflow
中的 --dev
开关是有意的吗?它也指示 pipenv
安装 Airflow 的开发依赖项。这些依赖项之一需要 Python.h
头文件(缺少)。解决问题:
- 如果你不需要开发依赖的话
删除
--dev
开关。 - 如果您需要开发
dependencies 然后安装
libpython2.7-dev
包,它 提供Pthon.h
,安装Aiflow前:apt install libpython2.7-dev
好吧,我真的很蠢。我试图在从 python:3.6-stretch.
构建的图像上设置 python2.7 virtualenv我改了
pipenv --python 2.7
至
pipenv --python 3.6
成功了。