我们使用第三方开源工具并生成警告:
DeprecationWarning: The compiler package is deprecated and removed in Python 3.x.
如何在不修改第三方代码的情况下抑制此警告?
我知道如何使用warnings.filter()
但我无法使用它:我从命令行调用py.test
,因此在警告获取之前,我的代码没有单一的源代码行被执行创建。
围绕控制台脚本创建包装器不是一种选择。
答案 0 :(得分:3)
您可以添加调用usercustomize
的{{1}}或sitecustomize
模块。它将在解释器启动时加载。
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
文件。