在不修改第三方代码的情况下禁止警告

时间:2014-07-04 10:52:51

标签: python warnings deprecation-warning

我们使用第三方开源工具并生成警告:

DeprecationWarning: The compiler package is deprecated and removed in Python 3.x.

如何在不修改第三方代码的情况下抑制此警告?

我知道如何使用warnings.filter()但我无法使用它:我从命令行调用py.test,因此在警告获取之前,我的代码没有单一的源代码行被执行创建。

围绕控制台脚本创建包装器不是一种选择。

1 个答案:

答案 0 :(得分:3)

您可以添加调用usercustomize的{​​{1}}或sitecustomize模块。它将在解释器启动时加载。

请参阅The Customization Modules

  

Python提供了两个钩子来让您自定义它:warnings.filter()sitecustomize。要查看其工作原理,首先需要找到用户site-packages目录的位置。启动Python并运行以下代码:

usercustomize
     

现在,您可以在该目录中创建名为>>> import site >>> site.getusersitepackages() '/home/user/.local/lib/python2.7/site-packages' 的文件   把你想要的东西放在里面。它会影响每次调用   Python,除非它以usercustomize.py选项启动以禁用   自动导入。

     

-s以相同的方式工作,但通常由全局site-packages目录中的计算机管理员创建,并在sitecustomize之前导入。有关详细信息,请参阅site模块的文档。

您可以使用PYTHONUSERBASE environment variable影响Python的外观,因此您可以在此处将Python指向每个项目usercustomize文件,前提是您考虑了添加到usercustomize.py的路径基地:

lib/python/site-packages

在上面的示例中,$ python -m site --user-site /Users/someuser/Library/Python/2.7/lib/python/site-packages $ PYTHONUSERBASE=/foo/bar python -m site --user-site /foo/bar/lib/python/site-packages 设置为PYTHONUSERBASE,如果存在,Python将加载/foo/bar

在Python virtualenv中,使用了基于Python 2.6之前的/foo/bar/lib/python/site-packages/usercustomize.py的自定义site.py文件;此版本省略了site.py功能。如果文件getusersitepackages()存在,则lib/pythonX.X/no-global-site-packages.txt模块将导入。您必须在虚拟环境usercustomize目录中使用sitecustomize.py文件