从 setup.py 安装时无法在 Google Colab 中导入 Tensorflow 2.2.0rc2

Cant import Tensorflow 2.2.0rc2 in Google Colab when installed from setup.py

我正在尝试在 Google Colab 中导入最新的 rc2 版本的 Tensorflow(目前为 2.2.0rc2),但是从我的 setup.py 安装脚本安装时无法执行此操作。

当我使用 !pip install tensorflow==2.2.0rc2 从 Colab 单元手动安装 Tensorflow 时,一切正常,我能够导入 Tensorflow。

接下来是我如何在 Google Colab 中安装依赖项:

# Executes the cell in bash mode
%%bash

if [ ! -d "/content/deep-deblurring/" ]; 
    then 
        git clone https://github.com/ElPapi42/deep-deblurring;
        cd deep-deblurring/
    else 
        cd deep-deblurring/; 
        git pull; 
fi;

git checkout development
cd ..

pip uninstall -y tensorflow tensor2tensor tensorboard tensorboardcolab tensorflow-datasets tensorflow-estimator tensorflow-gan tensorflow-hub tensorflow-metadata tensorflow-privacy tensorflow-probability

pip install colab-env
pip install --upgrade grpcio

cd deep-deblurring/
python setup.py install
cd ..

下一个是我的setup.py文件:

#!/usr/bin/python
# coding=utf-8

"""Setup and install the package and all the dependencies."""

from setuptools import setup, find_packages

with open('requirements.txt') as pro:
    INSTALL_REQUIRES = pro.read().split('\n')

setup(
    author='Whitman Bohorquez, Mo Rebaie',
    author_email='whitman-2@hotmail.com',
    name='deblurrer',
    license='MIT',
    description='Image Deblurring using Deep Learning Architecture',
    version='1.0.0',
    url='',
    packages=find_packages(),
    include_package_data=True,
    python_requires='>=3.6',
    install_requires=INSTALL_REQUIRES,
    classifiers=[
        'Development Status :: Alpha',
        'Programming Language :: Python',
        'Programming Language :: Python :: 3.6',
        'Intended Audience :: Developers',
    ],
)

接下来是存储库中的 requirements.txt:

grpcio == 1.27.2
kaggle
numpy
tensorflow >= 2.2.0rc2
pandas

实际上,Google Colab 附带 Tensorflow 2.2.0rc1,但我想要 rc2。当我执行时:

import tensorflow as tf
print(tf.__version__)

在执行setup.py安装脚本之前,导入工作正常。但是使用setup.py安装完成后,抛出错误ImportError: No module named 'tensorflow'

我检查了python setup.py install执行前后的tensorflow安装,似乎一切正常,安装前tensorflow 2.2.0rc1,安装后2.2.0rc2。

正如我首先提到的,当我使用 !pip install tensorflow==2.2.0rc2 手动安装 tensorflow 时,导入工作正常,所以问题一定是围绕 setup.py 文件或需求,类似的东西,但我没有看到它.

希望大家帮帮忙!

PD:这个项目设置在上周的星期五工作,但今天我尝试 运行 它,突然停止工作,没有明显的原因。

PD2:https://colab.research.google.com/drive/1Qv8h4ceEtDTq5lvt1uKJG8dk53_bUqBZ这是我与您分享的 Colab Notebook,它设置了重现问题的代码。

PD3:这是导入 tensorflow 时 Google Colab 中的完整错误回溯:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/usr/lib/python3.6/importlib/_bootstrap.py in _find_spec(name, path, target)

AttributeError: '_TensorflowImportHook' object has no attribute 'find_spec'

During handling of the above exception, another exception occurred:

ImportError                               Traceback (most recent call last)
2 frames
<ipython-input-7-69e5d056d1fc> in <module>()
----> 1 import tensorflow as tf
      2 
      3 tf.__version__

/usr/local/lib/python3.6/dist-packages/google/colab/_import_hooks/_tensorflow.py in find_module(self, fullname, path)
     26     if fullname != 'tensorflow':
     27       return None
---> 28     self.module_info = imp.find_module(fullname.split('.')[-1], path)
     29     return self
     30 

/usr/lib/python3.6/imp.py in find_module(name, path)
    295         break  # Break out of outer loop when breaking out of inner loop.
    296     else:
--> 297         raise ImportError(_ERR_MSG.format(name), name=name)
    298 
    299     encoding = None

ImportError: No module named 'tensorflow'

---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------

我找到了解决方法,但这不是解决这个问题的方法,所以这不会被接受为解决方案,但会帮助遇到同样麻烦的人继续他们的工作:

在安装自定义包之前手动安装您的要求,在我的例子中,这是 pip install -r "/content/deep-deblurring/requirements.txt":

# Executes the cell in bash mode
%%bash

if [ ! -d "/content/deep-deblurring/" ]; 
    then 
        git clone https://github.com/ElPapi42/deep-deblurring;
        cd deep-deblurring/
    else 
        cd deep-deblurring/; 
        git pull; 
fi;

git checkout development
cd ..

pip uninstall -y tensorflow tensor2tensor tensorboard tensorboardcolab tensorflow-datasets tensorflow-estimator tensorflow-gan tensorflow-hub tensorflow-metadata tensorflow-privacy tensorflow-probability

pip install colab-env
pip install --upgrade grpcio

pip install -r "/content/deep-deblurring/requirements.txt"

cd deep-deblurring/
python setup.py install
cd ..

目前这解决了导入问题,但这不是一个干净的解决方案,希望以后有更好的解释!

tensorflow 没有问题,但是 Colab 的 _TensorflowImportHook 缺少 find_spec impl,所以如果 tensorflow 安装为 egg 目录,它会引发。由于挂钩除了发出将 tensorflow 更新为 2.0 和 is scheduled for removal anyway 的通知之外没有做任何有用的事情,所以一个简单的修复方法是从笔记本开头某处的 sys.meta_path 清除它:

[1] import sys
    sys.meta_path[:] = [hook for hook in sys.meta_path if not h.__class__.__name__ == '_TensorflowImportHook']

[2] import tensorflow as tf
    print(tf.__version__)