gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:44 25 4
gpt4 key购买 nike

如何让 python 中的特殊变量 __debug__ 为使用 python setup.py install 安装然后导入的模块工作?

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

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

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

HERE False
HERE False
HERE False
...

所以这让我觉得 if __debug__: 被转换为 if True: 独立于导入时定义的 __debug__ 变量。

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

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

最佳答案

感谢评论区的帮助。终于成功了——运行:

python setup.py --help install

显示了一个选项列表。然后,很明显我没有正确安装优化。我需要运行:

python setup.py install -O2

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

另一种选择是安装:

python setup.py install --no-compile

这应该保留所有内容,以便您可以重新定义 __debug__

关于Python 的 __debug__ 特殊变量不适用于导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com