2013-07-13 3 views
39

ich für Python gerade fertig mein MySQLdb Paket installieren 2.6, und jetzt, wenn ich es importieren mit import MySQLdb, erscheint eine Warnung Benutzer erscheinenentfernen 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) 

Gibt es eine Möglichkeit, wie dies loswerden?

Antwort

79

Sie ~/.python-eggs nicht ändern kann von Gruppe/jeder beschreibbar sein. Ich denke, das funktioniert:

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

In einer Situation, in der * alles * für Gruppen schreibbar sein muss ('Entwickler' in diesem Fall), muss eine benutzerspezifische Möglichkeit bestehen, dies zu unterdrücken und zu sagen:" Ja, Ich bin mir bewusst, dass die anderen zwei Benutzer, die in dieser Gruppe aktiv sind, in den Eierordner schreiben können, das ist Absicht. Die globale Umask ist 0002. " – Amelia

9

Sie können unterdrücken Warnungen die Verwendung -W ignore:

python -W ignore yourscript.py 

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

Wenn Sie Code verwenden, die Sie wissen, wird eine Warnung, wie eine veraltete Funktion zu erhöhen, wollen aber nicht zu siehe die Warnung, dann ist es möglich, die Warnung mit dem catch_warnings Kontext-Manager zu unterdrücken:

import warnings 

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

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

Während im Kontextmanager werden alle Warnungen einfach ignoriert. Auf diese Weise können Sie bekanntermaßen veralteten Code verwenden, ohne die Warnung sehen zu müssen, ohne die Warnung für anderen Code zu unterdrücken, der die Verwendung von veraltetem Code möglicherweise nicht kennt. Hinweis: Dies kann nur in einer Single-Thread-Anwendung garantiert werden. Wenn zwei oder mehr Threads gleichzeitig den Kontextmanager catch_warnings verwenden, ist das Verhalten nicht definiert.

Wenn Sie nur flach wollen Warnungen ignorieren, können Sie filterwarnings verwenden:

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

Es funktioniert, danke! Aber ich denke über eine dauerhafte Lösung dafür nach, ohne '-W ignorieren' zu verwenden. –

+0

Es ist eine schlechte Übung, Warnungen zu ignorieren, insbesondere sicherheitsbezogene Warnungen. –

Verwandte Themen