运行任何诗歌可执行文件时出现此错误
Traceback (most recent call last):
File "/root/.local/bin/poetry", line 5, in <module>
from poetry.console.application import main
File "/root/.local/share/pypoetry/venv/lib/python3.8/site-packages/poetry/console/application.py", line 11, in <module>
from cleo.application import Application as BaseApplication
ModuleNotFoundError: No module named 'cleo'
我的容器就是用这个逻辑构建的。
FROM gcr.io/dataflow-templates-base/python38-template-launcher-base:flex_templates_base_image_release_20230508_RC00
ARG DIR=/dataflow/template
ARG dataflow_file_path
ARG PROJECT_ID
# environment to pull the right containers
ARG ENV
ARG TOKEN
ENV COMPOSER_$ENV=1
ENV HAMSTERDAM_ROOT=/dataflow/template/
# copying over necessary files
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
COPY transform/dataflow/${dataflow_file_path}.py beam.py
COPY deploy/dataflow/poetry.lock .
COPY deploy/dataflow/pyproject.toml .
# env var in order to use hamsterdam lib, for more info, see:
# https://cloud.google.com/dataflow/docs/guides/templates/configuring-flex-templates#set_required_dockerfile_environment_variables
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${DIR}/beam.py"
ENV FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES=""
ENV FLEX_TEMPLATE_PYTHON_PY_OPTIONS=""
ENV PIP_NO_DEPS=True
# install poetry
RUN curl -sSL https://install.python-poetry.org | python -
ENV PATH "/root/.local/bin/:${PATH}"
RUN poetry --version
我已经尝试卸载它和建议来自:
这些并不是真正适用的,因为它们是
poetry
非 docker 环境中的可执行文件,但不确定还能做什么。我有一个从 apache/beam_python3.8_sdk:2.45.0
构建的数据流 SDK,它具有相同的逻辑并且正在运行。
我忽略了最后一个
RUN
命令并构建了容器,这些是一些检查的输出
❯ docker run --rm --entrypoint /bin/bash dataflow -c 'which poetry'
/root/.local/bin/poetry
❯ docker run --rm --entrypoint /bin/bash dataflow -c 'poetry'
Traceback (most recent call last):
File "/root/.local/bin/poetry", line 5, in <module>
from poetry.console.application import main
File "/root/.local/share/pypoetry/venv/lib/python3.8/site-packages/poetry/console/application.py", line 11, in <module>
from cleo.application import Application as BaseApplication
ModuleNotFoundError: No module named 'cleo'
❯ docker run --rm --entrypoint /bin/bash dataflow -c 'which python'
/usr/local/bin/python
我的假设是
poetry
可执行文件正在导入其他库未安装到的 virtualenv。
更新:
我走进了一个兔子洞,做了这个
RUN pip install --no-cache-dir poetry cleo rapidfuzz importlib_metadata zipp crashtest
并且运行
poetry --version
有效但是 poetry config virtualenvs.create false
或任何其他命令将抛出此错误
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/poetry", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.8/site-packages/poetry/console/application.py", line 409, in main
exit_code: int = Application().run()
File "/usr/local/lib/python3.8/site-packages/cleo/application.py", line 338, in run
self.render_error(e, io)
File "/usr/local/lib/python3.8/site-packages/poetry/console/application.py", line 180, in render_error
self.set_solution_provider_repository(self._get_solution_provider_repository())
File "/usr/local/lib/python3.8/site-packages/poetry/console/application.py", line 398, in _get_solution_provider_repository
from poetry.mixology.solutions.providers.python_requirement_solution_provider import ( # noqa: E501
File "/usr/local/lib/python3.8/site-packages/poetry/mixology/__init__.py", line 5, in <module>
from poetry.mixology.version_solver import VersionSolver
File "/usr/local/lib/python3.8/site-packages/poetry/mixology/version_solver.py", line 8, in <module>
from poetry.core.packages.dependency import Dependency
ModuleNotFoundError: No module named 'poetry.core'
我发现了问题。在构建 Dataflow Flex 模板时,它似乎是
Dockerfile
的顺序
这会起作用
# installing poetry binaries
RUN curl -sSL https://install.python-poetry.org | python3 -
ENV PATH "/root/.local/bin/:${PATH}"
# copying over necessary files
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
COPY transform/dataflow/${dataflow_file_path}.py beam.py
COPY deploy/dataflow/poetry.lock .
COPY deploy/dataflow/pyproject.toml .
# env var in order to use custom lib, for more info, see:
# https://cloud.google.com/dataflow/docs/guides/templates/configuring-flex-templates#set_required_dockerfile_environment_variables
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${DIR}/beam.py"
ENV FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES=""
ENV FLEX_TEMPLATE_PYTHON_PY_OPTIONS=""
ENV PIP_NO_DEPS=True
但这不会
# copying over necessary files
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
COPY transform/dataflow/${dataflow_file_path}.py beam.py
COPY deploy/dataflow/poetry.lock .
COPY deploy/dataflow/pyproject.toml .
# env var in order to use custom lib, for more info, see:
# https://cloud.google.com/dataflow/docs/guides/templates/configuring-flex-templates#set_required_dockerfile_environment_variables
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${DIR}/beam.py"
ENV FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES=""
ENV FLEX_TEMPLATE_PYTHON_PY_OPTIONS=""
ENV PIP_NO_DEPS=True
# installing poetry binaries
RUN curl -sSL https://install.python-poetry.org | python3 -
ENV PATH "/root/.local/bin/:${PATH}"
看得更深一点,可能是环境变量在起作用,尽管我不太确切如何。这是出错时的环境变量
这是工作图的
env
❯ docker run --rm --entrypoint /bin/bash dataflow -c 'env'
_=/usr/bin/env
GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/etc/ssl/certs/ca-certificates.crt
PATH=/root/.local/bin/:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/gcloud/google-cloud-sdk/bin
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/1a96dc5acd0303c4700e02655aefd3bc68c78958/public/get-pip.py
PYTHON_GET_PIP_SHA256=d1d09b0f9e745610657a528689ba3ea44a73bd19c60f4c954271b790c71c2653
LD_LIBRARY_PATH=/usr/local/lib
PYTHON_PIP_VERSION=22.0.4
SHLVL=0
GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568
LANG=C.UTF-8
HOME=/root
PYTHON_SETUPTOOLS_VERSION=57.5.0
PWD=/
CLOUDSDK_CORE_DISABLE_PROMPTS=yes
PYTHON_VERSION=3.8.16
HOSTNAME=acbe81dff820
这是出错时的
env
输出
❯ docker run --rm --entrypoint /bin/bash dataflow -c 'env'
_=/usr/bin/env
PIP_NO_DEPS=True
GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/etc/ssl/certs/ca-certificates.crt
PATH=/root/.local/bin/:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/gcloud/google-cloud-sdk/bin
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/1a96dc5acd0303c4700e02655aefd3bc68c78958/public/get-pip.py
PYTHON_GET_PIP_SHA256=d1d09b0f9e745610657a528689ba3ea44a73bd19c60f4c954271b790c71c2653
LD_LIBRARY_PATH=/usr/local/lib
PYTHON_PIP_VERSION=22.0.4
SHLVL=0
FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES=
FLEX_TEMPLATE_PYTHON_PY_OPTIONS=
FLEX_TEMPLATE_PYTHON_PY_FILE=/dataflow/template/beam.py
GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568
LANG=C.UTF-8
HOME=/root
PYTHON_SETUPTOOLS_VERSION=57.5.0
PWD=/dataflow/template
CLOUDSDK_CORE_DISABLE_PROMPTS=yes
PYTHON_VERSION=3.8.16
HOSTNAME=6556fc251ce4