Python的__debug__特殊变量不适用于导入的模块

时间:2017-07-19 18:42:56

标签: python python-2.7

如何在python中为特殊变量__debug__设置已安装python setup.py install然后导入的模块?

目前,我正在开发一个在函数中包含以下语句的包:

     ...
     if __debug__:
         print "HERE", __debug__
     ...

当我在使用python -OO file.py运行的程序中导入包时,调用最终调用函数的函数时,我会在stdout中看到:

HERE False
HERE False
HERE False
...

因此,我认为if __debug__:已转换为if True:,与导入时定义的__debug__变量分开。

因此,我也尝试使用python -OO setup.py install安装软件包,但这也没有解决问题。当我在独立文件中使用__debug__并使用优化执行它时,我能够看到if __debug__:的预期行为,但是在我导入它时却没有。

如何使__debug__变量适用于导入的模块?

1 个答案:

答案 0 :(得分:2)

感谢评论部分提供的帮助。它终于成功了 - 运行:

python setup.py --help install

显示了一个选项列表。然后,很明显我正在安装优化不正确。我需要跑:

python setup.py install -O2

在编译模块时打开优化。关于@MarkDickinson发布的问题:python assert fires with -O,事实证明,字节编译模块实际上事先设置了if __debug__:语句,这意味着事实上__debug__确实在以后重新定义了影响if阻止。

另一种选择是安装:

python setup.py install --no-compile

应保留所有内容,以便重新定义__debug__