PyCharm中的TensorFlow Python警告 - 无法在__init __找到引用__version__。py

时间:2018-01-21 14:53:35

标签: python tensorflow pycharm

我正在使用

if tf.__version__ < x.x.x:
PyCharm中的

语句,可以在许多TensorFlow GitHub示例中找到,如下所示:

# tensorflow_version_test.py

import tensorflow as tf

#######################################################################################################################
def main():
    if tf.__version__ < "1.4.0":
        print("ERROR: TensorFlow version is older than 1.4.0, upgrade to 1.4.0 or higher before continuing !!!")
        return
    # end if

    print("TensorFlow version is >= 1.4.0, continuing . . .")

    # rest of program would go here . . .

# end main

#######################################################################################################################
if __name__ == "__main__":
    main()

这很好用,我现在在TensorFlow 1.4.0上,如果我按上面那样运行这个脚本,则不会显示错误消息,如果我将if语句更改为例如2.4。 0(当然还没有出现)然后错误显示为预期并且程序退出。

我遇到的问题是PyCharm在if语句中显示以下警告:

Cannot find reference '__version__' in '__init__.py'

以下是截图:

enter image description here

如果我选择PyCharm灯泡图标,我会得到以下选项:

enter image description here

其中没有一个特别有吸引力。

目前,我正在选择最后一个选项“Suppress for statement”,它在if语句上方添加了这一行

# noinspection PyUnresolvedReferences

我担心的是,我正在编写许多其他人将使用的文档,其中一些将使用PyCharm,其中一些人将不可避免地使用不同的编辑器。

出于这个原因,我无法更改任何TensorFlow init .py文件,因为这会在我的计算机上创建自定义安装,任何关注我的文档的人都会看到不同的结果如果他们使用PyCharm屏幕。此外,我正在使用pip来安装软件包,所以我甚至不确定这是否可行,但即使它仍然不是一个可接受的选择。

同样,我不想包含特定于PyCharm的注释行,因为这会对那些不使用PyCharm的人造成混淆。

我真的不想完全禁用此检查,因为我发现PyCharm的警告在很多情况下非常有用,因此我不想禁用它们。

通过谷歌搜索这个问题,我发现了post

建议的答案是编辑 init .py文件,由于上述原因我不想这样做,或者将import语句更改为

from somePackage import module1, module2, module3

这似乎不适用于我的情况,因为我完全使用语句导入TensorFlow

import tensorflow as tf

即使修改import语句以防止此警告在某种程度上是可能的,我仍然不会这样做,因为这会导致非PyCharm用户的混淆,并使我的示例与所有其他TensorFlow文档和示例不同。

目前看来这是我能做的最好的事情:

    # this next comment line is necessary to avoid a false warning if using the editor PyCharm
    # noinspection PyUnresolvedReferences
    if tf.__version__ < "1.4.0":
        print("ERROR: TensorFlow version is older than 1.4.0, upgrade to 1.4.0 or higher before continuing !!!")
        return
    # end if

这里有什么我想念的吗?有关更好的方法的建议吗?

1 个答案:

答案 0 :(得分:1)

tf.__version__是动态生成的,因此各种import黑客无法正常工作。

解决警告的简单方法是使用getattr,如:

import tensorflow as tf

if getattr(tf, '__version__') < "1.4.0":
    ....