2013-07-13 5 views
39

Я только что закончил устанавливать мой MySQLdb пакет для Python 2.6, и теперь, когда я импортировать его с помощью import MySQLdb, предупреждающий пользователя появляется появятсяУдалить 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) 

Есть ли способ, как избавиться от этого?

ответ

79

Вы можете изменить ~/.python-eggs не быть доступен для записи группы/всех. Я думаю, что это работает:

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

В ситуации, когда все * должно * быть записываемым группой («разработчики», в данном случае), должен быть доступный для пользователя способ подавления этого и сказать «да», Я хорошо знаю, что два других пользователя, активные в этой группе, могут писать в папку с яйцами, это намеренно. Глобальный umask - 0002. " – Amelia

9

Вы можете подавить предупреждения с помощью -W ignore:

python -W ignore yourscript.py 

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

Если вы используете код, который вы знаете, будет поднимать предупреждение, такие как устаревшие функции, но не хотят см. предупреждение, затем можно отключить предупреждение с помощью диспетчера контекстов catch_warnings:

import warnings 

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

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

Внутри контекстного менеджера все предупреждения будут просто проигнорированы. Это позволяет использовать известный устаревший код без необходимости видеть предупреждение, не подавляя предупреждение для другого кода, который может не знать о его использовании устаревшего кода. Примечание: это можно гарантировать только в однопоточном приложении. Если два или более потока используют диспетчер контекстов catch_warnings в одно и то же время, поведение не определено.

Если вы просто хотите утончаются игнорировать предупреждения, вы можете использовать filterwarnings:

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

Это работает, спасибо! Но я рассматриваю постоянное решение для этого, не используя '-W ignore'. –

+0

Неправильная практика игнорирования предупреждений, особенно предупреждений, связанных с безопасностью. –

Смежные вопросы