ImportError:没有名为google.auth

时间:2019-04-24 07:52:37

标签: python python-2.7 docker firebase-admin

当我尝试在firebase_admin中导入python 2.7时收到错误消息:

  

ImportError:没有名为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管理员:

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

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

  

ImportError:没有名为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: jonwayne+google-auth@google.com
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找不到它?以及如何解决?

2 个答案:

答案 0 :(得分:1)

构建您的docker映像时:docker build -t test -f Dockerfile .与您描述的结果不同。

  • echo $PYTHONPATH的结果未返回
  • 运行位于/usr/local/bin/python的python解释器使我能够导入firebase_admin

供参考:

$ which pip
/usr/bin/pip
$ /usr/bin/python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information. 
>>> import firebase_admin
>>>

如果您打算在Dockerfile中运行脚本(即CMD / ENTRYPOINT),建议您传入工作解释器的完整路径,本例中的完整路径位于/usr/local/bin/python

答案 1 :(得分:1)

我查看了adamantium/flutter的图像,并在Dockerfile中看到它依赖于直接随Python2一起提供的ubuntu:18.04,如PEP-394所述(有关更多信息,请参见下面的链接)这个)。

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

所以,我不明白您为什么要重新安装它。发生的事情是,您使用了一个Dockerfile,该文件在/usr/local/bin/中安装了另一个版本的Python2,并覆盖了指向原始Python2的符号链接,正如您在docker build日志中看到的一样

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