Cada vez que actualizo Python con Homebrew en macOS o al actualizar de LTS en Ubuntu me encuentro que tengo que reparar los virtualenvs de Python porque los enlaces simbólicos que apuntan al ejecutable de Python están rotos.
dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Users/jorge/.virtualenvs/domo/bin/python
Reason: image not found
[1] 14119 abort python
Hasta ahora lo que hacía era crear uno nuevo resintalando los módulos gracias a un requirements.txt, en el mejor de los casos, o reinstalando uno a uno todos los módulos según me iban saliendo los errores.
Ahora he descubierto que existe otra forma de arreglarlos más rápida y elegante. Consiste en restaurar los enlaces simbólicos del entorno virtual.
Para ver los enlaces simbólicos a reparar hay que situarse en la carpeta que contiene el entorno virtual, en mi caso .virtualenvs, porque uso virtualenvwrapper, y una vez allí ejecutar:
~/.virtualenvs $ find domo/ -type l
domo/.Python
domo/bin/python
domo/bin/python2
domo/include/python2.7
domo/lib/python2.7/_abcoll.py
domo/lib/python2.7/_weakrefset.py
domo/lib/python2.7/abc.py
domo/lib/python2.7/codecs.py
domo/lib/python2.7/config
domo/lib/python2.7/copy_reg.py
domo/lib/python2.7/encodings
domo/lib/python2.7/fnmatch.py
domo/lib/python2.7/genericpath.py
domo/lib/python2.7/lib-dynload
domo/lib/python2.7/linecache.py
domo/lib/python2.7/locale.py
domo/lib/python2.7/ntpath.py
domo/lib/python2.7/os.py
domo/lib/python2.7/posixpath.py
domo/lib/python2.7/re.py
domo/lib/python2.7/sre.py
domo/lib/python2.7/sre_compile.py
domo/lib/python2.7/sre_constants.py
domo/lib/python2.7/sre_parse.py
domo/lib/python2.7/stat.py
domo/lib/python2.7/types.py
domo/lib/python2.7/UserDict.py
domo/lib/python2.7/warnings.py
Siendo domo el nombre de mi entorno. Ahora para eliminarlos solo hay que ejecutar el comando:
~/.virtualenvs $ find domo/ -type l -delete
Y para restaurarlos hay que volver a ejecutar virtualenv usando el mismo nombre e indicando la ruta a la versión de Python:
~/.virtualenvs $ virtualenv –python=/usr/local/bin/python domo
Hecho esto el virtualenv está reparado.