Python项目的调试和发布构建策略

时间:2016-06-26 10:58:57

标签: python python-2.7 build interpreter compiler-optimization

我有一个软件(2100 SLOC)我认为它运行在两个不同版本中:一个版本向控制台提供详细的调试信息,另一个版本是优化版本。

我的目标是维持一个git分支。有没有办法标记代码的调试部分并通知Python解释器忽略代码的这些部分?

可能的应用程序包括:print语句,Python的日志记录工具,分析和断言 [编辑:显然通过设置-O标志忽略了这些。

2 个答案:

答案 0 :(得分:2)

我认为你过于复杂了。理想情况下,开发和生产环境应该没有不同的代码路径,只有不同的配置,否则很难确定您的测试是否真正反映了代码在部署时的行为方式。分析和调试代码之类的事情应该是该过程的外部事情,您在代码库上运行的东西,而不是 代码库的一部分。

如果您只关注日志记录,只需在不同环境中设置不同的输出级别即可。假设您有a standard library logging setup,您可以执行以下操作:

import logging
import os

logging.basicConfig(
    level=getattr(logging, os.getenv('LOG_LEVEL', 'DEBUG')),
    ...
)

在您的入口点,这样您就可以在生产环境中设置显式LOG_LEVEL环境变量(the allowed values之一),默认为DEBUG进行开发。或者,将默认值设置为生产级别(例如ERROR)并在开发环境中明确设置它。然后,您应该通过logging输出消息,而根本不使用print

您还应该让记录器处理任何字符串插值,即使用:

logger.info('hello %s', 'world')

而不是:

logger.info('hello %s' % 'world')  # or logger.info('hello {}'.format('world'))

因此,如果该日志记录级别未激活,则可以为您优化插值。

答案 1 :(得分:0)

我找到了答案here

if __debug__:
    doSomething()

要将__debug__设置为false,您需要使用标记-O-OO

运行Python