python - Docker 容器中缺少 python 包

标签 python docker pip docker-compose pipenv

我正在 Docker 容器中处理一个 tensorflow notebook。我通过在容器构建阶段安装的 pipenv 管理额外的依赖项。奇怪的是,我明确安装的一些软件包,例如“certifi”,似乎没有出现在 python 环境中。

我已经尝试在 RUN 命令中使用 pip 安装它,切换 Pipfile 的 Python 版本,并将几乎所有内容添加到 PATH 和 PYTHONPATH env 变量中。奇怪的是,如果我登录到容器并手动执行它,它就像一个魅力。

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-06bc95e4104d> in <module>
      6 # data wrangling
      7 import json
----> 8 import spacy
      9 from langdetect import detect
     10 import psycopg2

~usr/local/lib/python3.5/dist-packages/spacy/__init__.py in <module>
     10 from thinc.neural.util import prefer_gpu, require_gpu
     11 
---> 12 from .cli.info import info as cli_info
     13 from .glossary import explain
     14 from .about import __version__

~usr/local/lib/python3.5/dist-packages/spacy/cli/__init__.py in <module>
----> 1 from .download import download  # noqa: F401
      2 from .info import info  # noqa: F401
      3 from .link import link  # noqa: F401
      4 from .package import package  # noqa: F401
      5 from .profile import profile  # noqa: F401

~usr/local/lib/python3.5/dist-packages/spacy/cli/download.py in <module>
      3 
      4 import plac
----> 5 import requests
      6 import os
      7 import subprocess

~usr/local/lib/python3.5/dist-packages/requests/__init__.py in <module>
    110 from .__version__ import __copyright__, __cake__
    111 
--> 112 from . import utils
    113 from . import packages
    114 from .models import Request, Response, PreparedRequest

~usr/local/lib/python3.5/dist-packages/requests/utils.py in <module>
     22 
     23 from .__version__ import __version__
---> 24 from . import certs
     25 # to_native_string is unused here, but imported here for backwards compatibility
     26 from ._internal_utils import to_native_string

~usr/local/lib/python3.5/dist-packages/requests/certs.py in <module>
     13 packaged CA bundle.
     14 """
---> 15 from certifi import where
     16 
     17 if __name__ == '__main__':

ImportError: No module named 'certifi'


有人遇到过类似的问题吗?

复制的最小设置如下:

docker-compose.yaml:

version: '3.1'
services:

  notebook:
    container_name: Notebook
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5430:8888"
    user: ${CURRENT_UID}

docker 文件:

FROM tensorflow/tensorflow:latest-py3-jupyter

RUN pip install --user pipenv
ENV PATH="/root/.local/bin:/.local/bin:${PATH}"
ENV PYTHONPATH="/usr/lib/python35.zip:/usr/lib/python3.5:/usr/lib/python3.5/plat-x86_64-linux-gnu:/usr/lib/python3.5/lib-dynload:/.local/lib/python3.5/site-packages:/usr/local/lib/python3.5/dist-packages:/usr/lib/python3/dist-packages:${PYTHONPATH}"

RUN apt-get update
RUN apt-get install -y libsm6 libxext6 libxrender-dev libglib2.0-0 postgresql libpq-dev

# We copy just the requirements.txt first to leverage Docker cache
COPY ./Pipfile ./Pipfile
COPY ./Pipfile.lock ./Pipfile.lock

RUN pipenv install --deploy --system --ignore-pipfile
RUN python -m spacy download xx

RUN pip install --user certifi

Pip文件:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
numpy = "*"
scikit-learn = {extras = ["alldeps"]}
spacy = "*"
langdetect = "*"
ipykernel = "*"
bokeh = "*"
ipywidgets = "*"
plotly = "*"
lapjv = "*"
tensorflow = "*"
"psycopg2" = "*"
gensim = "*"
cmake = "*"
certifi = "*"

[dev-packages]

[requires]
python_version = "3.5"

使用 pipenv lock 锁定 Pipfile,使用 docker-compose up --build 构建并启动容器,然后登录容器显示 certifi 包不是安装。 将不胜感激!

最佳答案

从你的 dockerfile 看来,在你运行 spacy 之后,似乎正在安装 certifi,从堆栈跟踪来看,它似乎依赖于 certifi

RUN python -m spacy download xx

RUN pip install --user certifi

在运行依赖于它的脚本之前切换这些行的顺序以安装它。

另外,确保一切都配置为使用 python3,或者明确使用 python3pip3

关于python - Docker 容器中缺少 python 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582591/

相关文章:

python - 在 2 个单独的变量中同时获取 Floor Division 和 Remainder

python - 输出到终端的 Tensorflow 用等号填充

docker - Dokku/Docker 部署应用程序失败

python - 如何创建 pip 可安装项目?

python - 整数列表到元组列表中python

php - 如何在脚本中验证 CSS?

apache-spark - 如何启用Spark mesos docker executor?

jenkins - 标记 docker 图像并在 docker-compose 中添加变量

python-3.x - pip 卸载 : "No files were found to uninstall."

python - 使用Scrapy抓取数据