python - 导入错误 : No module named google. 身份验证

标签 python python-2.7 docker firebase-admin

当我尝试在 python 2.7 中导入 firebase_admin 时,出现错误:

ImportError: No module named google.auth

这是DockerFile我正在使用。

我已经使用源代码安装了 Python

wget https://www.python.org/ftp/python/2.7/Python-2.7.tgz
tar xvzf Python-2.7.tgz
cd Python-2.7
./configure
make
make install

然后我通过运行安装了 pip 和 firebase admin:

apt-get install -y python-pip
pip install firebase-admin

然后我在 python shell 中运行了 import firebase_admin 。 我收到错误:

ImportError: No module named google.auth

我运行了 pip show google.auth 并得到了以下输出:

Name: google-auth
Version: 1.6.3
Summary: Google Authentication Library
Home-page: https://github.com/GoogleCloudPlatform/google-auth- 
library-python
Author: Google Cloud Platform
Author-email: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="214b4e4f5640584f440a464e4e464d440c4054554961464e4e464d440f424e4c" rel="noreferrer noopener nofollow">[email protected]</a>
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: cachetools, six, pyasn1-modules, rsa

我运行了 echo $PYTHONPATH 并得到了这个:

/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages

这意味着google.auth已经安装,并且它的目录在PYTHONPATH中,为什么python找不到它?以及如何修复它?

最佳答案

我查看了 adamantium/flutter 的镜像,并在 Dockerfile 中看到它依赖于直接随 Python2 附带的 ubuntu:18.04,如 PEP- 中所述394(有关详细信息,请参阅下面的链接)。

https://www.python.org/dev/peps/pep-0394/

所以,我不明白你为什么要重新安装它。发生的情况是,您使用了一个 Dockerfile,它在 /usr/local/bin/ 中安装了另一个版本的 Python2,并覆盖了指向原始 Python2 的符号链接(symbolic link),如您在 docker 中看到的那样构建日志

if test -f /usr/local/bin/python -o -h /usr/local/bin/python; \
then rm -f /usr/local/bin/python; \
else true; \
fi
(cd /usr/local/bin; ln python2.7 python)

然后您可以验证容器内当前的 Python 解释器:

root@9b9176e6c26c:/# which python
/usr/local/bin/python

root@9b9176e6c26c:/# python --version
Python 2.7

同时,我从 Dockerfile 中删除了安装 Python2 的部分并得到了这个。

root@e6dd827dac1d:/# which python
/usr/bin/python

root@e6dd827dac1d:/# python --version
Python 2.7.15rc1

然后直接导入你想要的:

root@e6dd827dac1d:/# python -c "import firebase_admin"

root@e6dd827dac1d:/# echo $?
0

可以看到成功了,返回代码0。

修改后的Dockerfile:

FROM adamantium/flutter

RUN apt-get update && \
    apt-get install -y wget && \
    apt-get install -y build-essential && \
    apt-get install -y zlib1g && \
    apt-get install zlib1g-dev && \
    wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz && \
    tar xvzf Python-3.6.7.tgz && \
    cd Python-3.6.7 && \
    ./configure && make && \
    make install

RUN apt-get install -y python-pip && \
    pip install firebase-admin

关于python - 导入错误 : No module named google. 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824948/

相关文章:

python - TypeError : can't concat bytes to str, 尝试使用 python3

Python 条件运算符 'if else' 不等于 'and or'

python - 有什么理由在 PyMem_Malloc 上使用 malloc 吗?

python - Pandas SettingWithCopyWarning 原因不明

python-2.7 - 如何突破python shell :

mysql - 从docker中的mysql dump恢复数据库后如何进行db:migrate

docker - 启动容器进程导致 “exec:\”转到\“: executable file not found in $PATH”:未知

Android Battery Historian - docker : Error response from daemon: pull access denied for gcr. io/android-battery-historian

python - == 运算符实际上在 Python 字典上做了什么?

python - Python 中的相同对象问题