如何解决使用 pyenv 安装的 python 时出现“No module dbm”
我希望使用 pyenv 来管理 docker 映像中的多个 python 版本。我目前在 python2.7.17
映像中运行 debian:buster-slim
时遇到问题,其中缺少包 dbm
:
Python 2.7.17 (default,Apr 22 2021,18:07:32)
[GCC 8.3.0] on linux2
Type "help","copyright","credits" or "license" for more information.
>>> import dbm
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
ImportError: No module named dbm
有趣的是python的系统版本加载这个模块很好:
Python 2.7.16 (default,Oct 10 2019,22:02:15)
[GCC 8.3.0] on linux2
Type "help","credits" or "license" for more information.
>>> import dbm
>>> print(dbm)
<module 'dbm' from '/usr/lib/python2.7/lib-dynload/dbm.x86_64-linux-gnu.so'>
Pyenv Python3 安装没有这个问题。这只发生在 Python2.7 中。
我发现这篇文章与此相关,但没有找到解决方案:GDBM doesn't work with Python 3.6 and anaconda
知道为什么我在使用 pyenv 时缺少 dbm.so
而在使用我的系统版本 python 时没有吗?
解决方法
我通过在任何其他自定义构建逻辑之前将 pyenv install 命令放置在 Dockerfile 顶部来解决此问题:
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
ca-certificates \
build-essential \
git \
unzip \
bzip2 \
libsqlite3-dev \
libssl-dev \
libbz2-dev \
libffi-dev \
libdb-dev \
python-gdbm \
libreadline-dev \
python-openssl \
zlib1g-dev \
build-essential \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
ENV PREV_USER="$USER"
ENV PYENV_ROOT=/home/myuser/.pyenv
ENV PATH="$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"
USER myuser
SHELL ["/bin/bash","-o","pipefail","-c"]
RUN curl https://pyenv.run | bash \
&& eval "$(pyenv init -)" \
&& eval "$(pyenv virtualenv-init -)" \
&& pyenv install 2.7.17 \
&& pyenv install 3.6.10
USER $PREV_USER
不确定具体细节,但现在可以使用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。