1

我正在尝试从 Docker 运行 Python Faust。

基于此文档:https ://faust.readthedocs.io/en/latest/userguide/installation.html

我创建了一个简单的 Docker 文件:

FROM python:3

ADD ./app/app.py /

RUN pip3 install --upgrade pip

RUN pip install -U faust

RUN pip install "faust[rocksdb]"

RUN pip install "faust[rocksdb,uvloop,fast,redis]"

CMD ["python", "./app.py"]

当我创建 docker 文件时,我在第 5 阶段收到错误(步骤 5/7:RUN pip install "faust[rocksdb]")

---> 在 1e42a5e50cbe 中运行 已满足要求:/usr/local/lib/python3.10/site-packages (1.10.4) 中的 faust[rocksdb] 已满足要求:/usr/ 中的 terminaltables<4.0,>=3.1 local/lib/python3.10/site-packages (from faust[rocksdb]) (3.1.10) 已经满足要求:点击/usr/local/lib/python3.10/site-packages中的<8.0,>=6.7 (来自 faust[rocksdb]) (7.1.2) 要求已经满足:yarl<2.0,>=1.0 in /usr/local/lib/python3.10/site-packages (来自 faust[rocksdb]) (1.7.2) 要求已经满足:/usr/local/lib/python3.10/site-packages 中的 aiohttp-cors<2.0,>=0.7(来自 faust[rocksdb])(0.7.0) 已经满足要求:/usr/ 中的 mypy-extensions local/lib/python3.10/site-packages (from faust[rocksdb]) (0.4.3) 已经满足要求:/usr/local/lib/python3 中的 colorclass<3.0,>=2.2。10/site-packages (来自 faust[rocksdb]) (2.2.2) 要求已经满足:/usr/local/lib/python3.10/site-packages 中的 opentracing<2.0.0,>=1.3.0 (来自 faust [rocksdb]) (1.3.0) 要求已经满足:mode<4.4,>=4.3.2 in /usr/local/lib/python3.10/site-packages (from faust[rocksdb]) (4.3.2) 要求已经满足:venusian<2.0,>=1.1 in /usr/local/lib/python3.10/site-packages (from faust[rocksdb]) (1.2.0) 要求已经满足:aiohttp<4.0,>=3.5.2在 /usr/local/lib/python3.10/site-packages 中(来自 faust[rocksdb])(3.8.1) 已经满足要求:robinhood-aiokafka<1.2,>=1.1.6 在 /usr/local/lib/ python3.10/site-packages (来自 faust[rocksdb]) (1.1.6) 要求已经满足:/usr/local/lib/python3.10/site-packages 中的 croniter>=0.3.16 (来自 faust[rocksdb] ) (1.1.0) 收集 python-rocksdb>=0.6.7 下载 python-rocksdb-0.7.0.tar.gz (219 kB) 准备元数据 (setup.py): 开始准备元数据 (setup.py): 完成状态“完成”已满足要求:/usr/local/lib/python3.10/site-packages 中的 aiosignal>=1.1.2(来自 aiohttp<4.0,>=3.5.2->faust[rocksdb])(1.2.0)已满足要求满意:/usr/local/lib/python3.10/site-packages 中的 attrs>=17.3.0(来自 aiohttp<4.0,>=3.5.2->faust[rocksdb])(21.2.0) 要求已经满足: /usr/local/lib/python3.10/site-packages 中的 frozenlist>=1.1.1 (来自 aiohttp<4.0,>=3.5.2->faust[rocksdb]) (1.2.0) 已满足要求:charset- /usr/local/lib/python3.10/site-packages 中的 normalizer<3.0,>=2.0 (来自 aiohttp<4.0,>=3.5.2->faust[rocksdb]) (2.0.9) 已满足要求:/usr/local/lib/python3.10/site-packages 中的 multidict<7.0,>=4.5 (来自 aiohttp<4.0,>=3.5.2->faust[rocksdb]) (5.2.0) 已满足要求:异步-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/site-packages (来自 aiohttp<4.0,>=3.5.2->faust[rocksdb]) (4.0.2) 已经有要求满意:/usr/local/lib/python3.10/site-packages 中的 python-dateutil(来自 croniter>=0.3.16->faust[rocksdb])(2.8.2) 已满足要求:colorlog>=2.9.0在 /usr/local/lib/python3.10/site-packages (from mode<4.4,>=4.3.2->faust[rocksdb]) (6.6.0) 要求已经满足:setuptools>=25 in /usr/ local/lib/python3.10/site-packages (from python-rocksdb>=0.6.7->faust[rocksdb]) (57.5.0) 要求已经满足:kafka-python<1.5,>=1.4.6 in / usr/local/lib/python3.10/site-packages (from robinhood-aiokafka<1.2,>=1.1.6->faust[rocksdb]) (1.4.7) 要求已经满足:idna>=2.0 in /usr/local/lib/python3.10/站点包(来自 yarl<2.0,>=1.0->faust[rocksdb])(3.3)已经满足要求:/usr/local/lib/python3.10/site-packages 中的六个>=1.5(来自 python-dateutil ->croniter>=0.3.16->faust[rocksdb]) (1.16.0)

还有一个错误部分

为收集的包构建轮子:python-rocksdb 为 python-rocksdb (setup.py) 构建轮子:已启动错误:命令错误退出状态为 1:命令:/usr/local/bin/python -u -c 'import io,操作系统、系统、设置工具、标记化;sys.argv[0] = '"'"'/tmp/pip-install-b8y7g4hs/python-rocksdb_b1c08993fd134ac4bc5​​9e6f5d18bcd91/setup.py'"'"'; file ='"'"'/tmp/pip-install-b8y7g4hs/python-rocksdb_b1c08993fd134ac4bc5​​9e6f5d18bcd91/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)( file ) if os.path.exists( file ) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read()., '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-9_o4ek6z cwd: /tmp/pip-install-b8y7g4hs/python-rocksdb_b1c08993fd134ac4bc5​​9e6f5d18bcd91/ 完整输出(64 行):运行 bdist_wheel运行 build
运行 build_py 创建 build 创建 build/lib.linux-x86_64-3.10 创建 build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/interfaces.py -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/ errors.py -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/merge_operators.py -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/ init .py -> build/lib.linux-x86_64 -3.10/rocksdb
创建 build/lib.linux-x86_64-3.10/rocksdb/tests 复制rocksdb/tests/test_memtable.py -> build/lib.linux-x86_64-3.10/rocksdb/tests 复制rocksdb/tests/test_db.py -> build/lib .linux-x86_64-3.10/rocksdb/tests 复制rocksdb/tests/ init.py -> build/lib.linux-x86_64-3.10/rocksdb/tests 复制rocksdb/tests/test_options.py -> build/lib.linux-x86_64-3.10/rocksdb/tests 运行 egg_info 写入 python_rocksdb.egg-info/PKG -INFO 将dependency_links 写入python_rocksdb.egg-info/dependency_links.txt 将要求写入python_rocksdb.egg-info/requires.txt 将顶级名称写入python_rocksdb.egg-info/top_level.txt 读取清单文件'python_rocksdb.egg-info /SOURCES.txt'读取清单模板'MANIFEST.in'写入清单文件'python_rocksdb.egg-info/SOURCES.txt'复制rocksdb/_rocksdb.cpp -> build/lib.linux-x86_64-3.10/rocksdb复制rocksdb/rockdb.pyx -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/backup.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/cache.pxd -> build/lib.linux-x86_64 -3.10/rocksdb 复制rocksdb/comparator.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/db.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/env.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/filter_policy.pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/iterator.pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rockdb/logger.pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/memtablerep.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/merge_operator.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/options.pxd -> build/lib。 linux-x86_64-3.10/rocksdb 复制rocksdb/slice
.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/slice_transform.pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/snapshot。 pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/status.pxd -> build/lib.linux-x86_64-3.10/rocksdb
复制rocksdb/std_memory.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/table_factory.pxd -> build/lib.linux-x86_64-3.10/rocksdb 复制rocksdb/universal_compaction.pxd -> build/lib。 linux-x86_64-3.10/rocksdb 创建 build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/comparator_wrapper.hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/filter_policy_wrapper .hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/memtable_factories.hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/merge_operator_wrapper.hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/slice_transform_wrapper.hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 复制rocksdb/cpp/utils.hpp -> build/lib。 linux-x86_64-3.10/rocksdb/cpp
复制rocksdb/cpp/write_batch_iter_helper.hpp -> build/lib.linux-x86_64-3.10/rocksdb/cpp 运行build_ext
cythoning rocksdb/_rocksdb.pyx 到rocksdb/_rocksdb.cpp
/tmp/pip-install-b8y7g4hs/python-rocksdb_b1c08993fd134ac4bc5​​9e6f5d18 .eggs/Cython-0.29.26-py3.10-linux-x86_64.egg/Cython/Compiler/Main.py:369:FutureWarning:未设置 Cython 指令“language_level”,目前使用 2 (Py2)。这将在以后的版本中更改!文件:/tmp/pip-install-b8y7g4hs/python-rocksdb_b1c08993fd134ac4bc5​​9e6f5d18bcd91/rocksdb/_rocksdb.pyx tree = Parsing.p_module(s, pxd, full_module_name) building 'rocksdb._rocksdb' extension 创建 build/temp.linux-x86_64-3.10
创建 build/temp.linux-x86_64-3.10/rocksdb gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.10 - c rockdb/_rocksdb.cpp -o build/temp.linux-x86_64-3.10/rocksdb/_rocksdb.o -std=c++11 -O3 -Wall -Wextra -Wconversion -fno-strict-aliasing -fno-rtti rocksdb/ _rocksdb.cpp:705:10:致命错误:rocksdb/slice.h:没有这样的文件或目录 705 | #include "rocksdb/slice.h" | ^~~~~~~~~~~~~~~~~ 编译终止。错误:命令 '/usr/bin/gcc' 失败,退出代码 1
---------------------------------- ------ python-rocksdb (setup.py) 的构建轮:完成状态“错误”错误:python-rocksdb 的构建轮失败

任何人都可以帮助我继续前进吗?我想在 Kubernetes 上使用来自 Docker 的 Faust。

4

1 回答 1

1

阅读错误消息,其中明确指出您缺少头文件:

致命错误:rocksdb/slice.h:没有这样的文件或目录 705 | #include "rocksdb/slice.h" | ^~~~~~~~~~~~~~~~~ 编译终止。错误:命令“/usr/bin/gcc”失败,退出代码为 1

因此,您需要构建和安装RocksDB。faust[rocksdb]这与使用 pip的安装是分开的。这只是安装python-rocksdb了底层库的 Python 接口。

甚至还有一个基于 Python 3.7 Slim的(第三方) RocksDB docker 镜像。

您可以直接使用它,也可以从Dockerfile中为该图像采取一些技巧。

于 2021-12-27T23:24:05.337 回答