如何修正Python中的“模块已加载”用户警告?
在命令行运行大多数Python脚本时,出现了以下类型的警告:
/Library/Python/2.6/site-packages/virtualenvwrapper/hook_loader.py:16: UserWarning: Module
pkg_resources was already imported from /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.pyc, but /Library/Python/2.6/site-packages is being added to sys.path
import pkg_resources
/Library/Python/2.6/site-packages/virtualenvwrapper/hook_loader.py:16: UserWarning: Module site was already imported from /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site.pyc, but /Library/Python/2.6/site-packages is being added to sys.path
import pkg_resources
我觉得这可能和同时使用distribute和virtualenv有关,但我想确认一下是否有人遇到过这个问题,或者知道怎么解决它。
5 个回答
2
在我的情况下,重新安装任何东西都没有用。系统里有一些孤立的 .pyc 文件(特别是 pkg_resources.pyc),它们留在了 /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python 这个地方。
sudo find . -type f -name "*.pyc" -delete
解决了这个问题。这个链接帮我找到了问题所在。
4
在Python中,想要像用电工胶带遮住发动机故障灯那样忽略警告,可以使用 -W
这个命令行选项,或者添加一个 警告过滤器。
7
你可以在创建虚拟环境的时候使用 --no-site-packages
这个选项,这样在你的虚拟环境里就看不到系统的库文件了。因为如果你的虚拟环境和系统根目录下都有一些库,可能会导致一些问题。
使用 --no-site-packages
创建虚拟环境时,可以避免系统库之间的冲突。我几乎每次创建新的虚拟环境时都会用这个选项,这样可以防止出现冲突。虽然我可能会有多个库的副本,但至少它们之间不会互相干扰。