Skip to main content
 首页 » 编程设计

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

2025年01月19日30kerrycode

我正在使用

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' 

截图如下:

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

没有一个特别吸引人。

目前,我选择最后一个选项“Suppress for statement”,它将这一行添加到 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 

我在这里缺少什么吗?关于更好的方法有什么建议吗?

请您参考如下方法:

tf.__version__ 是动态生成的,因此各种 import hacks 不太可能起作用。

绕过警告的一个简单技巧是使用 getattr喜欢:

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