Arreglar entornos virtuales de Python tras una actualización

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.