簡體   English   中英

使用 pyenv 安裝 python 時出現“無模塊 dbm”

[英]"No module dbm" when using pyenv installed python

我希望使用 pyenv 來管理 docker 映像中的多個 python 版本。 我目前在debian:buster-slim圖像中運行python2.7.17時遇到問題,其中缺少 package 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", "copyright", "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

不確定具體細節,但現在可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM