2012-12-17 4 views
12

I python-matplotlib e python-mpltoolkits.basemap installati dai pacchetti di Ubuntu. L'installazione di python-mpltoolkits.basemap installa anche python-dap come dipendenza.Perché ottengo "UserWarning: Modulo dap già importato da Nessuno ..."

Quando importo basemap, ottengo questo avvertimento:

>>> 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__) 

Questo significa Ho 2 contrastanti installazioni di dap? (Che potrebbe essere possibile, resti di alcune vecchie installazioni manuali.) Here è un messaggio di avviso in qualche modo simile, ma nel suo caso il messaggio indica dove si trova l'altra installazione, in conflitto. Il mio messaggio dice solo None. Cosa significa questo?

EDIT 1:

>>> import sys 
>>> print sys.modules['dap'] 
<module 'dap' (built-in)> 

EDIT 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' 

EDIT 3: sì Cosa mi sembra di avere 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() 

EDIT 4: in realtà posso ottenere l'errore di:

>>> 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 

quindi questo non ha nulla a che fare con mpl_toolkits.basemap come tale.

+1

Significa che c'è una voce 'sys.modules ['dap']' che non ha un percorso. È un avvertimento, btw, non un'eccezione, quindi * potrebbe * essere a posto. Cosa ti offre 'print sys.modules ['dap']'? –

+1

Ciò significa che non ha nome file; è automaticamente contrassegnato come '(built-in)'. Interessante, mi chiedo che cosa abbia inserito quello lì dentro. Hai importato qualcosa o è un interprete Python pulito? O hai prima importato mpl_toolkits.basemap'? –

+0

Non importa se importare prima mpl_toolkits.basemap' o meno, il risultato è lo stesso. –

risposta

24

Non posso davvero dire che avrei capito i dettagli, ma a quanto pare ogni volta che il pacchetto python-dap è installato, quindi provare a import pkg_resources dà questo avviso. Here è una discussione.

In seguito a un avviso da here (commento 29 alla fine della pagina), ho aggiunto dap come prima riga nel file /usr/lib/python2.7/dist-packages/dap-2.2.6.7.egg-info/namespace_packages.txt e non ricevere più avvisi. Spero che questo non rompere nulla.

+2

Grazie mille! – HyperCube

+1

Per quanto posso dire, questa correzione è corretta, ma indica un bug nel setup.py per il pacchetto "dap". – ncoghlan

2

Recentemente ho dovuto rintracciare un problema simile, e il vero significato del messaggio di errore:

UserWarning: Module dap was already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path 

sembra essere "Mentre l'estensione del percorso di 'dap', ha trovato una directory uovo-info che non dichiara 'dap' come un pacchetto namespace ".

Questo suggerisce due cose: python-dap manca un "namespace_packages = [ 'dap']" dichiarazione nel proprio setup.py, e setuptools davvero dovrebbero dare un messaggio di errore migliore in questo caso ...

+1

Problema archiviato: https://bitbucket.org/pypa/setuptools/issue/2/emit-less-cryptic-error-message-for-a – ncoghlan

1

Se non è necessario il pacchetto, è sufficiente rimuoverlo, ad es. su un sistema Ubuntu o Debian apt-get remove --purge python-dap ha rimosso il pacchetto per me e questo ha bloccato l'avviso. È facile installare accidentalmente pacchetti che non ti servono a causa dei consigli sulle dipendenze durante l'installazione di alcuni pacchetti.

Quando si tenta di rimuoverlo, il sistema di imballaggio avviserà l'utente se la rimozione del pacchetto (in questo caso python-dap, ma altri pacchetti potrebbero causare l'errore), imporrà anche la rimozione di altri pacchetti che dipendono da esso . Nel mio caso non ci sono altri pacchetti che dipendono direttamente da python-dap e non lo stavo usando per qualcosa di cui ero a conoscenza, quindi disinstallarlo era semplice, indolore e mettere a tacere l'avviso.

Altri programmi di installazione di pacchetti (come i sistemi di imballaggio non OS come pip o easy_install) potrebbero rendere più difficile la rimozione del pacchetto; potrebbe essere necessario eliminare il pacchetto a mano, quindi preferirei invece lo accepted answer come modo per disattivare l'avviso a meno che il metodo apt-get remove che ho consigliato qui funzioni per te.