使用pipenv

时间:2018-10-05 21:19:52

标签: airflow pipenv

我正在尝试将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对您有用。

2 个答案:

答案 0 :(得分:1)

是否打算使用--dev中的pipenv install --dev airflow开关?它也指示pipenv安装Airflow的开发依赖项。这些依赖项之一需要Python.h头文件(丢失)。解决问题的方法:

  • 如果您不需要开发依赖项,那么 删除--dev开关。
  • 如果您需要开发 依赖项,然后安装libpython2.7-dev软件包,该软件包 在安装Aiflow之前提供Pthon.hapt install libpython2.7-dev

答案 1 :(得分:1)

好的,我真的很傻。我试图在从python:3.6-stretch构建的映像上设置python2.7 virtualenv。

我改变了

pipenv --python 2.7

pipenv --python 3.6

它奏效了。