web-dev-qa-db-ja.com

ピップインストール-eパッケージがDockerに表示されない

requirements.txt以下を含むファイル:

Flask-RQ==0.2
-e git+https://token:[email protected]/user/repo.git#Egg=repo

Docker Composeを使用してDockerコンテナをビルドしようとすると、両方のパッケージがダウンロードされてインストールされますが、pip freeze兆候はありません-e パッケージ。アプリを実行しようとすると、このパッケージがインストールされていないようです。ビルドからの関連出力は次のとおりです。

Collecting Flask-RQ==0.2 (from -r requirements.txt (line 3))
  Downloading Flask-RQ-0.2.tar.gz
Obtaining repo from git+https://token:[email protected]/user/repo.git#Egg=repo (from -r requirements.txt (line 4))
  Cloning https://token:[email protected]/user/repo.git to ./src/repo

そして、これが私のDockerfileです。

FROM python:2.7

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt

COPY . /usr/src/app

私はこの状況を非常に奇妙に感じ、どんな助けにも感謝します。

25
linkyndy

私は同様の問題に遭遇し、問題が発生する可能性のある1つの方法は次のとおりです。

_WORKDIR /usr/src/app
_

_pip install_の前に設定されます。 pipは、WORKDIR内に_src/_ディレクトリ(パッケージがインストールされている場所)を作成します。これで、アプリファイルをコピーしたときに_src/_ディレクトリが上書きされないため、これらすべてが問題になることはありません。

ただし、ボリュームのマウントから_/usr/src/app_への変更になる場合があります。これを行うと、_/usr/src/app/src_ディレクトリが上書きされ、パッケージが見つかりません。

したがって、1つの修正は、WORKDIRを_pip install_の後に移動することです。したがって、Dockerfileは次のようになります。

_FROM python:2.7

RUN mkdir -p /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt

COPY . /usr/src/app
WORKDIR /usr/src/app
_

これで解決しました。うまくいけばうまくいきます。

31
mikexstudios

@mikexstudiosは正しいです。これは、pipがパッケージソースを/usr/src/app/srcに保存しているために発生しますが、ローカルディレクトリをその上にマウントしています。つまり、pythonはパッケージを見つけることができませんソース。

WORKDIRの位置を変更するのではなく、pipコマンドを次のように変更して解決しました。

pip install -r requirements.txt --src /usr/local/src

エーテルアプローチが機能するはずです。

22
Adrian Macneil

Docker化されたコンテナの下の要件ファイルからGitリポジトリをインストールするときに同様のエラーを受け取っている場合は、Gitのインストールを忘れている可能性があります。

これが私が受け取ったエラーです:

Downloading/unpacking CMRESHandler from 
git+git://github.com/zigius/python-elasticsearch-logger.git (from -r 
/home/ubuntu/requirements.txt (line 5))
Cloning git://github.com/zigius/python-elasticsearch-logger.git to 
/tmp/pip_build_root/CMRESHandler
Cleaning up...
Cannot find command 'git'
Storing debug log for failure in /root/.pip/pip.log
The command '/bin/sh -c useradd ubuntu -b /home && echo 
"ubuntu     ALL     = NOPASSWD: ALL" >> /etc/sudoers             && 
chown -R ubuntu:ubuntu /home/ubuntu && pip install -r /home/ubuntu/requirements.txt returned a non-zero code: 1

以下は、gitをインストールしてからすべての要件をインストールするDockerfileの例です。

FROM python:3.5-slim

RUN apt-get update && apt-get install -y --no-install-recommends git \

ADD . /code       

WORKDIR /code
RUN pip install --upgrade pip setuptools && pip install -r /home/ubuntu/requirements.txt

これで、Docker化された環境の要件ファイルでgitパッケージを使用できます

2
ZiGiUs