MySQL Incorrectamente configurado Razón: uso inseguro de la ruta relativa
Estoy usando Django, y cuando corro python manage.py runserver
recibo el siguiente error:
ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Library/Python/2.7/site-packages/_mysql.so
Reason: unsafe use of relative rpath libmysqlclient.18.dylib in /Library/Python/2.7/site-packages/_mysql.so with restricted binary
No estoy del todo seguro de cómo arreglar esto. He instalado MySQL-python vía pip. Y seguí este paso anterior.
También quiero señalar que esto es con El Capitán Beta 3.
2 answers
En OS X El Capitan (10.11), Apple agregó Protección de Integridad del sistema.
Esto evita que los programas en ubicaciones protegidas como /usr
llamen a una biblioteca compartida que use una referencia relativa a otra biblioteca compartida. En el caso de _mysql.so
, contiene una referencia relativa a la biblioteca compartida libmysqlclient.18.dylib
.
En el futuro, la biblioteca compartida _mysql.so
puede ser actualizada. Hasta entonces, se puede forzar a utilizar una referencia absoluta a través de la install_name_tool
utilidad.
Asumiendo que libmysqlclient.18.dylib
está en /usr / local / mysql / lib/, entonces ejecute el comando:
sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql/lib/libmysqlclient.18.dylib \
/Library/Python/2.7/site-packages/_mysql.so
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-22 07:26:01
Si hay muchas rutas relativas que arreglar para algo (como sucedió conmigo para la biblioteca opencv). Puede utilizar el siguiente fragmento:
Cambie las rutas ABSPATH y LIBPATHS en consecuencia. Se va a crear rPathChangeCmd.txt que puede pegar en el terminal. También creará rPathChangeErr.txt en caso de errores. Yo sugeriría comprobar el archivo de error (si se creó) antes de pegar los comandos.
import glob
import subprocess
import os.path
ABSPATH = "/usr/local/lib/" # absolute path to relative libraries
# libraries to correct
LIBPATHS = ['/usr/local/lib/python2.7/site-packages/cv2.so', '/usr/local/lib/libopencv*']
PREFIX = 'sudo install_name_tool -change '
assert(ABSPATH.startswith('/') and ABSPATH.endswith('/'),
'please provide absolute library path ending with /')
libs = []
for path in LIBPATHS:
libs += glob.glob(path)
cmd = []
err = []
for lib in libs:
if not os.path.isfile(lib):
err.append(lib+" library not found") # glob should take care
datastr = subprocess.check_output(['otool','-l','-v', lib])
data = datastr.split('\n')
for line in data:
ll = line.split()
if not ll: continue
if (ll[0] == 'name' and ll[1].endswith('.dylib') and not ll[1].startswith('/')):
libname = ll[1].split('/')[-1]
if os.path.isfile(ABSPATH+libname):
cmd.append(PREFIX+ll[1]+" "+ABSPATH+libname+' '+lib)
else:
err.append(ABSPATH+libname+" does not exist, hence can't correct: "+ll[1]+" in: "+lib)
ohandle = open("rpathChangeCmd.txt", 'w')
for lib in cmd:
ohandle.write(lib+'\n')
ohandle.close()
if err:
ehandle = open("rpathChangeErr.txt", 'w')
for e in err:
ehandle.write(e+'\n')
ehandle.close()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-21 22:25:53