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

标签 python python-2.7 build interpreter compiler-optimization

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

我的目标是维护一个 git 分支。有没有办法标记代码的调试部分并向 Python 解释器发出信号以忽略这些代码部分?

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

最佳答案

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

如果您只关心日志记录,只需在不同的环境中设置不同的输出级别即可。假设你有 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'))

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

关于python - Python 项目的调试和发布构建策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037801/

相关文章:

build - 如何在 LG WebOS TV 中安装 .IPK 文件?

java - 导出后 Eclipse 插件项目中的 ASCII 文件不可见

python - Pip 包路径 - windows

python - ValueError : set_wakeup_fd only works in main thread on Windows on Python 3. 8 使用 Django 3.0.2 或 Flask 2.0.0

python - 使用 np.zero 创建元组

python - 忽略 python 文件的其余部分

python - 在 Python 中以字符串格式对日期列表进行排序的最有效方法是什么?

python - 使用 python setuptools 库时的导入问题

python - 我编写的二进制 PLY 文件导致 meshlab 崩溃

android - 使用远程计算机构建 Android 应用程序