【问题标题】:Why doesn't pip inside my Docker container install pre-compiled packages?为什么我的 Docker 容器中的 pip 不安装预编译包?
【发布时间】:2021-02-21 20:47:13
【问题描述】:
在我的主机上安装 scipy:
❯ 点安装 scipy
收集 scipy
下载 scipy-1.5.4-cp38-cp38-manylinux1_x86_64.whl (25.8 MB)
|████████████████████████████████| 25.8 MB 2.4 MB/秒
已满足要求:/home/tomas/.pyenv/versions/3.8.2/envs/3.8.2@appdaemon/lib/python3.8/site-packages 中的 numpy>=1.14.5(来自 scipy)(1.19.4 )
安装收集的包:scipy
成功安装 scipy-1.5.4
尝试在我的 Docker 容器中安装 scipy (acockburn/appdaemon:latest):
/conf # pip install scipy
收集 scipy
下载 scipy-1.5.4.tar.gz (25.2 MB)
|████████████████████████████████| 25.2 MB 274 KB/秒
安装构建依赖项...完成
获得制造轮子的要求......完成
正在准备车轮元数据...错误
错误:命令出错,退出状态为 1:
命令:/usr/local/bin/python /usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpdj2d13lc
cwd:/tmp/pip-install-o5ltw_ig/scipy
完整输出(139 行):
lapack_opt_info:
lapack_mkl_info:
自定义 UnixCCompiler
在 ['/usr/local/lib', '/usr/lib', '/usr/lib/'] 中找不到库 mkl_rt
无法使用
openblas_lapack_info:
自定义 UnixCCompiler
自定义 UnixCCompiler
在 ['/usr/local/lib', '/usr/lib', '/usr/lib/'] 中找不到库 openblas
无法使用
openblas_clapack_info:
自定义 UnixCCompiler
自定义 UnixCCompiler
库 openblas,lapack 在 ['/usr/local/lib', '/usr/lib', '/usr/lib/'] 中找不到
无法使用
火焰信息:
自定义 UnixCCompiler
在 ['/usr/local/lib', '/usr/lib', '/usr/lib/'] 中找不到库火焰
无法使用
atlas_3_10_threads_info:
设置 PTATLAS=ATLAS
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 tatlas,在 /usr/local/lib 中找不到 tatlas
自定义 UnixCCompiler
在 /usr/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 tatlas,在 /usr/lib 中找不到 tatlas
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 tatlas,在 /usr/lib/ 中找不到 tatlas
无法使用
atlas_3_10_info:
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 satlas,satlas 在 /usr/local/lib 中找不到
自定义 UnixCCompiler
在 /usr/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 satlas,satlas 在 /usr/lib 中找不到
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 lapack_atlas
自定义 UnixCCompiler
库 satlas,satlas 在 /usr/lib/ 中找不到
无法使用
atlas_threads_info:
设置 PTATLAS=ATLAS
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 ptf77blas、ptcblas、atlas
自定义 UnixCCompiler
在 /usr/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/lib 中找不到库 ptf77blas、ptcblas、atlas
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 ptf77blas、ptcblas、atlas
无法使用
地图集信息:
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/local/lib 中找不到库 f77blas、cblas、atlas
自定义 UnixCCompiler
在 /usr/lib 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/lib 中找不到库 f77blas、cblas、atlas
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 lapack_atlas
自定义 UnixCCompiler
在 /usr/lib/ 中找不到库 f77blas、cblas、atlas
无法使用
加速信息:
无法使用
拉包信息:
自定义 UnixCCompiler
在 ['/usr/local/lib', '/usr/lib', '/usr/lib/'] 中找不到库 lapack
无法使用
lapack_src_info:
无法使用
无法使用
setup.py:460: UserWarning: Unrecognized setuptools command ('dist_info --egg-base /tmp/pip-modern-metadata-ksceopr3'),继续生成 Cython 源和扩展模板
warnings.warn("无法识别的 setuptools 命令 ('{}'),继续 "
从 SciPy 源目录运行。
/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/numpy/distutils/system_info.py:1712:用户警告:
未找到 Lapack (http://www.netlib.org/lapack/) 库。
搜索库的目录可以在
numpy/distutils/site.cfg 文件([lapack] 部分)或通过设置
LAPACK 环境变量。
如果 getattr(self, '_calc_info_{}'.format(lapack))():
/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/numpy/distutils/system_info.py:1712:用户警告:
未找到 Lapack (http://www.netlib.org/lapack/) 源。
搜索源的目录可以在
numpy/distutils/site.cfg 文件([lapack_src] 部分)或通过设置
LAPACK_SRC 环境变量。
如果 getattr(self, '_calc_info_{}'.format(lapack))():
回溯(最近一次通话最后):
文件“/usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py”,第 257 行,在
主要的()
文件“/usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py”,第 240 行,在 main
json_out['return_val'] = hook(**hook_input['kwargs'])
文件“/usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py”,第 110 行,在 prepare_metadata_for_build_wheel
返回挂钩(元数据目录,配置设置)
文件“/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/setuptools/build_meta.py”,第 161 行,在 prepare_metadata_for_build_wheel
self.run_setup()
文件“/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/setuptools/build_meta.py”,第 253 行,在 run_setup
超级(_BuildMetaLegacyBackend,
文件“/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/setuptools/build_meta.py”,第 145 行,在 run_setup
exec(编译(代码,__file__,'exec'),locals())
文件“setup.py”,第 583 行,在
setup_package()
setup_package 中的文件“setup.py”,第 579 行
设置(**元数据)
文件“/tmp/pip-build-env-4401a2iy/overlay/lib/python3.8/site-packages/numpy/distutils/core.py”,第 137 行,在设置中
配置 = 配置()
文件“setup.py”,第 477 行,在配置中
引发 NotFoundError(msg)
numpy.distutils.system_info.NotFoundError:未找到 lapack/blas 资源。
--------------------------------------
错误:命令出错,退出状态为 1:/usr/local/bin/python /usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpdj2d13lc 检查日志完整的命令输出。
同样的事情发生在 numpy 上。
我的 Docker 容器和主机使用完全相同的 CPython 版本 (3.8.2) 并且都是 x86_64。为什么两个地方都没有安装预编译库?这是我能控制的吗?
【问题讨论】:
-
-
@hd1 对,但关键是 pip 没有安装预编译库。我不想修改 Docker 映像,因为这会使我的设置复杂化。
-
@Hubro 如果您使用的是 alpine 或类似的发行版,则必须在实际运行 pip 之前安装许多操作系统级别的依赖项Scipy 和 Numpy 依赖于它们。
-
比如在alpine安装Python依赖之前,我要运行RUN apk update \ && apk add --no-cache bash libxml2-dev libxslt-dev gcc python3-dev linux-headers musl-dev openssl-dev libffi-dev build-base
-
@dmitryro Dang... 这破坏了我不修改原始图像的整个计划...哦,好吧:(
标签:
python
docker
numpy
scipy
pip