我从Ubuntu软件包安装了python-matplotlib
和python-mpltoolkits.basemap
。安装python-mpltoolkits.basemap
也会将python-dap
安装为依赖项。
当我导入底图时,我收到此警告:
>>> import mpl_toolkits.basemap
/usr/lib/pymodules/python2.7/mpl_toolkits/__init__.py:2: UserWarning: Module dap was
already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path
__import__('pkg_resources').declare_namespace(__name__)
这是否意味着我有2个dap
的安装冲突? (这可能是一些旧的手动安装的残余。)Here是一个类似的警告消息,但在他的情况下,消息告诉另一个冲突的安装位于何处。我的消息只是说None
。这是什么意思?
编辑1:
>>> import sys
>>> print sys.modules['dap']
<module 'dap' (built-in)>
编辑2:
$ python -S
Python 2.7.3 (default, Sep 26 2012, 21:53:58)
[GCC 4.7.2] on linux2
>>> import sys
>>> print sys.modules['dap']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'dap'
编辑3:是的我似乎有sitecustomize.py
:
$ cat /etc/python2.7/sitecustomize.py
# install the apport exception handler if available
try:
import apport_python_hook
except ImportError:
pass
else:
apport_python_hook.install()
编辑4:实际上我可以通过以下方式得到错误:
>>> import pkg_resources
__main__:1: UserWarning: Module dap was already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path
所以这与mpl_toolkits.basemap
无关。
答案 0 :(得分:24)
我无法确切地说我了解详细信息,但显然每当安装软件包python-dap
时,尝试import pkg_resources
都会发出此警告。 Here是一些讨论。
根据here的建议(页面末尾的评论29),我添加了dap
作为文件/usr/lib/python2.7/dist-packages/dap-2.2.6.7.egg-info/namespace_packages.txt
中的第一行,并且不再收到警告。希望这不会破坏任何事情。
答案 1 :(得分:2)
我最近不得不追查类似的问题,以及错误消息的实际含义:
UserWarning: Module dap was already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path
似乎是“在扩展'dap'的路径时,找到了一个不会将'dap'声明为命名空间包的egg-info目录”。
这表明两件事:python-dap在自己的setup.py中缺少“namespace_packages = ['dap']”声明,而setuptools 真的应该在这种情况下提供更好的错误消息...
答案 2 :(得分:0)
如果您不需要包裹,只需将其移除,例如在Ubuntu或Debian系统上apt-get remove --purge python-dap
为我删除了包裹,这使警告无效。在安装某些软件包时,由于依赖性建议,很容易意外安装您不需要的软件包。
当您尝试将其删除时,包装系统会警告您是否删除了包(在这种情况下为python-dap
,但其他包也可能导致此错误发生)也会强行删除其他包依靠它。在我的情况下,没有其他软件包直接依赖于python-dap
而且我没有将它用于我所知道的任何事情,因此卸载它很简单,无痛,并且使警告无效。
其他软件包安装程序(例如pip
或easy_install
等非操作系统打包系统)可能会使删除软件包变得更加困难;您可能需要手动删除软件包,因此我建议使用accepted answer作为静音警告的方法,除非我推荐的apt-get remove
方法适合您。