2013-07-13 9 views
39

Ho appena finito di installare il mio pacchetto MySQLdb per Python 2.6, e ora, quando ho importare utilizzando import MySQLdb, un messaggio di avviso all'utente apparire appariràRimuovere Python UserWarning

/usr/lib/python2.6/site-packages/setuptools-0.8-py2.6.egg/pkg_resources.py:1054: 
UserWarning: /home/sgpromot/.python-eggs is writable by group/others and vulnerable 
to attack when used with get_resource_filename. Consider a more secure location 
(set with .set_extraction_path or the PYTHON_EGG_CACHE environment variable). 
    warnings.warn(msg, UserWarning) 

C'è un modo per sbarazzarsi di questo?

risposta

79

È possibile modificare ~/.python-eggs di non essere scrivibile dal gruppo/tutti. Penso che funzioni:

chmod g-wx,o-wx ~/.python-eggs 
+1

In una situazione in cui tutto * deve * essere scrivibile dal gruppo ('sviluppatori', in questo caso), ci deve essere un modo di sopprimere l'utente e dire" sì, Sono ben consapevole che gli altri due utenti attivi in ​​questo gruppo possono scrivere nella cartella egg, che è intenzionale: l'umask globale è 0002. " – Amelia

9

È possibile eliminare gli avvisi utilizzando il -W ignore:

python -W ignore yourscript.py 

If you want to supress warnings in your script (quote from docs):

Se si utilizza il codice che si sa sarà sollevare un avvertimento, come ad esempio una funzione di deprecato, ma non si vuole vedere l'avviso, quindi è possibile sopprimere l'avviso utilizzando il gestore di contesto catch_warnings:

import warnings 

def fxn(): 
    warnings.warn("deprecated", DeprecationWarning) 

with warnings.catch_warnings(): 
    warnings.simplefilter("ignore") 
    fxn() 

Mentre all'interno del gestore di contesto tutti gli avvisi verranno semplicemente ignorati. Ciò consente di utilizzare il codice deprecato conosciuto senza dover visualizzare l'avviso senza sopprimere l'avviso per altro codice che potrebbe non essere a conoscenza del suo utilizzo del codice deprecato. Nota: questo può essere garantito solo in un'applicazione a thread singolo. Se due o più thread utilizzano contemporaneamente il gestore di contesto catch_warnings, il comportamento non è definito.

Se si desidera solo uscire ignorare gli avvisi piatte, è possibile utilizzare filterwarnings:

import warnings 
warnings.filterwarnings("ignore") 
+0

Funziona, grazie! Ma sto considerando una soluzione permanente per questo, senza usare '-W ignore'. –

+0

È una cattiva pratica ignorare gli avvertimenti, in particolare gli avvertimenti relativi alla sicurezza –

Problemi correlati