为什么我会收到“UserWarning:模块dap已经从None导入...”

时间:2012-12-17 13:39:52

标签: python python-2.7 matplotlib matplotlib-basemap

我从Ubuntu软件包安装了python-matplotlibpython-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无关。

3 个答案:

答案 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而且我没有将它用于我所知道的任何事情,因此卸载它很简单,无痛,并且使警告无效。

其他软件包安装程序(例如pipeasy_install等非操作系统打包系统)可能会使删除软件包变得更加困难;您可能需要手动删除软件包,因此我建议使用accepted answer作为静音警告的方法,除非我推荐的apt-get remove方法适合您。