2

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

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

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

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

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

4

1 回答 1

3

您可以添加一个usercustomizesitecustomize模块来调用warnings.filter(). 它将在解释器启动时加载。

请参阅自定义模块

Python 提供了两个钩子让你自定义它:sitecustomizeusercustomize. 要查看它是如何工作的,您首先需要找到您的用户站点包目录的位置。启动 Python 并运行以下代码:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python2.7/site-packages'

现在您可以在该目录中创建一个名为的文件usercustomize.py,并将您想要的任何内容放入其中。它将影响 Python 的每次调用,除非它-s以禁用自动导入的选项启动。

sitecustomize工作方式相同,但通常由计算机管理员在全局站点包目录中创建,并在usercustomize. site有关更多详细信息,请参阅模块的文档。

PYTHONUSERBASE您可以使用环境变量影响 Python 的外观,因此您可以在此处将 Python 指向每个项目的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设置为/foo/bar,则 Python 将加载(/foo/bar/lib/python/site-packages/usercustomize.py如果存在)。

在 Python virtualenvsite.py中,使用了基于site.pyPython 2.6 之前的自定义文件;这个版本省略了这个getusersitepackages()功能。如果文件lib/pythonX.X/no-global-site-packages.txt存在,usercustomize模块将不会被导入。您必须改用虚拟 env目录sitecustomize.py中的文件。lib/python/site-packages

于 2014-07-04T10:55:14.237 回答