如何使用python实现构建变体?

如何使用python实现构建变体?,python,Python,在C/C++应用程序中,我通过定义一个高级宏开发了一些轻微的构建变体 #define PRODUCTION_BUILD #define DEBUG_BUILD ... 是否有某种等价物可以用于有条件地包含大型python应用程序的组件?python没有像C/C++这样的预处理器。它也没有真正的常数。按照惯例,你可以用大写字母来定义“常量”,比如 DEBUG_BUILD = True 但除了惯例之外,没有什么能阻止它被修改。如果您只需要两个变体(调试/生产),则可以使用 __debug__

在C/C++应用程序中,我通过定义一个高级宏开发了一些轻微的构建变体

#define PRODUCTION_BUILD
#define DEBUG_BUILD
...

是否有某种等价物可以用于有条件地包含大型python应用程序的组件?

python没有像C/C++这样的预处理器。它也没有真正的常数。按照惯例,你可以用大写字母来定义“常量”,比如

DEBUG_BUILD = True
但除了惯例之外,没有什么能阻止它被修改。如果您只需要两个变体(调试/生产),则可以使用

__debug__

此变量将根据运行python脚本时的optimize标志或PYTHONOPTIMIZE环境变量进行设置


使用“调试”的好处在于,如果您试图修改其值,它将抛出一个SyntaxError。

这不就是您的VCS中分支的用途吗?@AdamSmith:不是。分支用于分离代码版本,而不是二进制文件。想要在开发分支中编译一个发行版是完全正常的(这样你就可以测试它,然后将你的开发分支合并到稳定的分支中)。@VincentSavard啊,也许我不理解宏在C中的作用。我假设它在修改代码内部的某些内容(因此:不同的代码,不同的分支)。@AdamSmith:以断言为例。您希望确保函数调用列表时列表不为空,因此添加了一个
断言(!my_list.is_empty())
。在开发过程中,您希望看到您的断言是否为false,并且希望看到错误消息。但是,当您构建一个发行版时,您不想让用户看到这种错误(相反,您可能希望记录它并正常地失败)。因此,您的断言的定义方式是,只有在构建调试二进制文件而不是发布二进制文件时,它才起作用。这就是宏有用的地方。@VincentSavard真棒,谢谢你的解释!:)
if __debug__:
  do something
else:
  do something else