42898


`python:alpine`のDockerコンテナ上でアプリを動かしたいと考えているのですが、`pip install -r
requirements.txt`内の`cffi`のインストール段階で以下のエラーが出て失敗します。

[code]

    Collecting cffi==1.11.5 (from -r requirements.txt (line 4))
      Downloading cffi-1.11.5.tar.gz (438kB)
        Complete output from command python setup.py egg_info:
    
            No working compiler found, or bogus compiler options passed to
            the compiler from Python's standard "distutils" module.  See
            the error messages above.  Likely, the problem is not related
            to CFFI but generic to the setup.py of any Python package that
            tries to compile C code.  (Hints: on OS/X 10.8, for errors about
            -mno-fused-madd see http://stackoverflow.com/questions/22313407/
            Otherwise, see https://wiki.python.org/moin/CompLangPython or
            the IRC channel #python on irc.freenode.net.)
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-e8t2krwd/cffi/
    
[/code]

Dockerfileは以下の通りです。

[code]

    FROM python:alpine
    
    ADD app.py /
    ADD server.py /
    ADD start.sh /
    ADD requirements.txt /
    ADD templates /
    
    RUN apk add --no-cache git openssl ffmpeg opus libffi-dev
    RUN pip install -r requirements.txt
    EXPOSE 80 443
    
[/code]

requirements.txtは以下の通りです。

[code]

    aiohttp==1.0.5
    async-timeout==2.0.1
    certifi==2018.1.18
    cffi==1.11.5
    chardet==3.0.4
    click==6.7
    discord.py==0.16.12
    Flask==0.12.2
    get==0.0.39
    gunicorn==19.7.1
    idna==2.6
    itsdangerous==0.24
    Jinja2==2.10
    MarkupSafe==1.0
    multidict==4.1.0
    post==0.0.26
    public==0.0.65
    pycparser==2.18
    pydub==0.21.0
    PyNaCl==1.0.1
    query-string==0.0.28
    requests==2.18.4
    six==1.11.0
    urllib3==1.22
    websockets==3.4
    Werkzeug==0.14.1
    
[/code]

コンパイラが見つからないようですがなぜこうなってしまうのかわかりません。


CC BY-SA 3.0
2018-04-03T04:19:16.820
42881
2018-04-03T11:32:29.263
7232
question
python docker
Docker python:alpineでcffiのコンパイルに失敗する


## 解決法

`pip install` の前に以下を実行してください。

[code]

    apk add build-base libffi-dev
    
[/code]

## 解説

[cffi](http://cffi.readthedocs.io/en/latest/) はその名の通り C への [FFI (Foreign
Function Interface)](https://ja.wikipedia.org/wiki/Foreign_function_interface)
を提供するものなので、動かすには C の処理系が必要です。そして `python:alpine` には GCC などの C
コンパイラが含まれていません。したがって自前で [GCC](https://wiki.alpinelinux.org/wiki/GCC)
をインストールする必要があります。

また StackDestroyer さんの Dockerfile
には既に含まれていますが、[公式のインストール手順](http://cffi.readthedocs.io/en/latest/installation.html)によると
GCC の他に [libffi-dev](https://pkgs.alpinelinux.org/packages?name=libffi-
dev&branch=edge) も必要です。


CC BY-SA 3.0
2018-04-03T08:19:25.350
42898
2018-04-03T11:32:29.263
2018-04-03T11:32:29.263
19110
19110
42881
answer