PyCharm中的TensorFlow Python警告 - 在__init__.py中找不到引用__version__。

4
我正在使用
if tf.__version__ < x.x.x:

在许多TensorFlow GitHub示例中,可以在PyCharm中找到以下语句:
# 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

这些选项都不是特别吸引人。

目前,我选择最后一个选项“抑制for语句”,它会在if语句上方添加此行。

# noinspection PyUnresolvedReferences

我的担忧是,我正在编写文档,许多其他人将使用它,其中一些人将使用PyCharm,而有些人则不可避免地会使用其他编辑器。

因此,我不能更改任何TensorFlow的__init__.py文件,因为那样会在我的电脑上创建一个自定义安装程序,如果他们使用PyCharm,那么任何遵循我的文档的用户将在屏幕上看到不同的结果。此外,我使用pip来安装软件包,所以我甚至不确定这是否可能,但即使可以,这仍然不是一个可接受的选择。

同样,我不想包含特定于PyCharm的注释行,因为这会导致那些不使用PyCharm的人感到困惑。

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

在谷歌上搜索这个问题后,我找到了这个post

建议的答案是要么编辑一个init.py文件,但出于上述原因,我宁愿不这样做,要么将导入语句更改为类似于以下内容的语句。

from somePackage import module1, module2, module3

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

import tensorflow as tf

即使可以修改导入语句以避免此警告,我仍然不想这样做,因为这会对非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个回答

2

tf.__version__是动态生成的,因此各种import技巧不太可能奏效。

一个简单的解决方法是使用getattr

import tensorflow as tf

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

1
谢谢您的建议,但我想我会坚持使用上面的注释行。我宁愿放一个奇怪的注释,也不想改变实际运行代码的行以适应PyCharm。 - cdahms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接