如何通过编程方式检测代码是在Nuitka编译模式还是Python解释模式下运行的

10

有人能说一下如何检测代码运行在由Nuitka创建的可执行文件中还是正常的Python解释器中吗?

我认为最理想的是有一个名为"is_nuitka"的标志,当编译时设置为True,并且在未编译时不应存在。

然后可以使用类似以下代码:

if '__is_nuitka__' in locals() or '__is_nuitka__' in globals():
    print('debug info: running in nuitka mode')

有什么建议吗?有没有类似的东西可用?还有其他替代方法吗?


我也在寻找那个问题的解决方案。你找到答案了吗? - Stefan
2个回答

7

0.6.2版本开始,您可以使用以下代码:

is_nuitka = "__compiled__" in globals()

我希望像sys.pypy_version_info一样,对于Nuitka也有类似的功能。检查某个东西是否已编译并不一定会继续工作,因为会有更多的Python编译器被创建。 - dstromberg

-2
第一个想法是检查 sys.argv[0],如下所示:
if '.exe' in sys.argv[0]:
    # compiled

“python my_script_to_modify_.exe_files.py” 这条命令已经打破了你的假设。 - RedX
1
如果sys.argv[0].endswith('.exe'),那么就 =) - Pavel M.
在Linux系统上使用Nuitka 0.6.15.3时,文件扩展名为.bin而不是.exe。如果Nuitka有sys模块的话,最好从该模块获取一些内容。 - dstromberg

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