VStudio Code Mac

El recuento de la experiencia en Mac.


Contenido


Introducción

Aunque estas notas comenzaron sin mucha organización (ni orden), crecieron hasta el punto de que tuvieron que ser divididas por sistema operativo (para facilitar su manejo y consulta). La motivación detrás de estas anotaciones fue simplemente registrar las cosas que uno hace (y espera hacerlas sólo una primera vez) y que seguramente uno las olvidará pronto, pero que seguramente terminará tratando de recordar qué fue lo que uno hizo cuando nuevamente las necesita.

Instalación

Para el caso de macOS (a pesar de venir de Microsoft), la instalación es realmente muy simple. En la página del producto, seleccionar la versión adecuada al procesador que uno tenga, Intel o Apple Silicon (y que sea para una versión soportada de macOS) bastará descargar el paquete y descomprimirlo (al momento de escribir esto se descarga como un .zip, aunque en anteriormente era en forma de disk image). La aplicación quedará colocada (como Application Bundle) en el mismo directorio. Así, bastará hacer un drag & drop a donde quiera que se desee tener la aplicación (usualmente /Applications o $HOME/Applications para que se incluya automáticamente en el Launchpad).

Para que pueda ser lanzado desde la línea de comando, hay que añadirlo al path (substituir la ruta con la adecuada) de búsqueda de programas con:

 export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"

que puede ser temporalmente en la línea de comandos de una sesión o agregándolo al archivo de arranque del shell (e.g., ~/.bash_profile para el caso del BASH). En caso de dificultades para editar el archivo de arranque puede usarse:

cat <> ~/.bash_profile
 # Add Visual Studio Code (code)
 export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"
 EOF

Se requiere «resourcear» el .bash_profile (o salir y volver a entrar en la sesión de terminal).


Uso

Python

Intérprete

Para seleccionar un interprete de Python en particular (ya sea alguno de varios instalados o que corresponda a un administrador de ambientes como venv o conda7):

  1. vía la paleta de comandos:
    • Mac: + Shift + P
    • PC: Ctrl + Shift + P
  2. Buscar por Python: select Interpreter (escribir parte de esta cadena o buscar en la lista).
  3. De los resultados que se muestren, seleccionar al intérprete deseado.

Run and Debug

La depuración de programas8 se puede llevar a cabo tanto en el código como en las unidades de prueba, aunque estas últimas se llevan a cabo en forma separada, es decir, a través de la opción Testing.

La ejecución y depuración de programas dentro del entorno de VSCode parte de la definición de una configuración.

Testing

Para poder llevar a cabo sesiones de depuración en la sección de pruebas, es primero necesario definir el framework que se usará.


Extensiones

Un aspecto positivo de VS Code es el poder contar con agregados (los famosos plug-ins) a la funcionalidad del editor. De los probados, se hace una lista abajo. Notas en cada una de ellas según me he encontrado con sus particularidades.

Mermaid

Si bien VS Code soporta de forma nativa Markdown, hay extensiones a esta especificación de marcado que requieren de algo de ayuda (vía un plug-in) para poder hacer el rendering adecuadamente. Algunas de estas extensiones para Markdown son las de Mermaid. Hay varios plug-ins que permiten visualizar los diagramas descritos a través de Mermaid. Aparecen nuevas, se actualizan y cambian algunas, y desaparecen otras. Seguirle el ritmo a todas es imposible. Aquí describo las que he probado.

Markdown Preview Mermaid Support

El plug-in Markdown Preview Mermaid Support es una de las extensiones más maduras y con más descargas que llegué a encontrar en su momento. Una vez instalada, bastaba solicitar la vista previa del archivo (con un clic derecho en su pestaña) para que a la par se abriera otra que mostraba el rendering del diagrama. Una de las ventajas de esta extensión es que permite ver de inmediato cualquier actualización en el archivo fuente.

Mermaid Chart

Mermaid Chart es otra extensión muy buena. Según dice su descripción, esta es la «oficial». Su funcionamiento es ligeramente distinto a Markdown Preview Mermaid Support (por ejemplo, en ésta, uno debe hacer clic derecho sobre el diagrama para poder acceder a la opción de preview).

Vim (vscodevim)

Fanático del vi, no podía dejar de tener esta extensión. Algunas cosas con las que me he encontrado de ella son:

  • Al menos en el caso de la versión para Windows de VS Code, la búsqueda de la cadena bajo el cursos debe ser habilitada: File > Preferences > Settings. Buscar por vim.visualstar y dar clic en el resultado (debe ser el único) para activarlo.

Python y Pylance

La versión o adición de Microsoft de Python (por aquello de «no buscarle los tres pies al gato«; es decir tomar lo que esta empresa produce para no entrar en conflictos).

GitGraph

La extensión GitGraph es muy útil para el seguimiento de un proyecto «versionado» con git.

Remote – WSL

El manejo de los archivos en el subsistema linux proporcionado por Windows es de cuidado (es decir, con WSL 1 hay el riesgo de batir cosas si se trabaja con archivos de este subsistema desde afuera, desde el entorno de Windows o viceversa).

Sync Scroll

Una extensión muy útil para cuando se está editando un archivo tomando de referencia algún otro es Sync Scroll, que como el nombre sugiere permite hacer un scroll simultáneo de dos secciones de edición.

SynthWave ’84

La extensión SynthWave ’84 es en realidad un «tema» (un esquema de coloración) que busca rememorar esos «neon dreams» que caracterizó la música y moda de la década de 1980.

Material Icon Theme

Para presentar ícenos en el explorador de archivos. En lugar de los íconos conceptuales permite identificar los archivos por otros comercial y tecnológicamente más ubícuos.

Amethyst Themes

Temas de coloración de tonos morados. Bueno para trabajar con baja iluminación.

Jupyter notebooks

VS Code permite ejecutar libretas Jupyter2.

Work in progress….

GitHub Codespaces

Permite habilitar la interacción con un entorno de trabajo en un contenedor Docker hospedado en GitHub.


Troubleshooting

Algunas soluciones a problemas y dificultades experimentadas.

DLL

El siguiente mensaje de error aparece en la «DEBUG CONSOLE» al tratar de ejecutar una sesión de depuración sobre una unidad de prueba. Para este caso en Windows 10 con miniconda instalado y sobre SQLite3 (el cual ya estaba instalado). Los pasos seguidos consistieron en descargar la versión de SQLLite apropiada para el sistema operativo y arquitectura del procesador del sitio del proyecto de SQLite, y copiar los archivos sqlite3.dll y sqlite3.def del paquete de distribucion en el entorno creado por conda, en su folder de DLLs. No fue necesario reiniciar VSCode.

Traceback (most recent call last):
File «C:UsersWH895NTMiniconda3envscanvaslibrunpy.py», line 193, in run_module_as_main «main«, mod_spec) File «C:UsersWH895NTMiniconda3envscanvaslibrunpy.py», line 85, in _run_code exec(code, run_globals) File «c:UsersWH895NT.vscodeextensionsms-python.python-2021.9.1218897484pythonFileslibpythondebugpy__main_.py», line 45, in
cli.main()
File «c:UsersWH895NT.vscodeextensionsms-python.python-2021.9.1218897484pythonFileslibpythondebugpy/..debugpyservercli.py», line 444, in main
run()
File «c:UsersWH895NT.vscodeextensionsms-python.python-2021.9.1218897484pythonFileslibpythondebugpy/..debugpyservercli.py», line 285, in run_file
runpy.run_path(target_as_str, run_name=compat.force_str(«main«))
File «C:UsersWH895NTMiniconda3envscanvaslibrunpy.py», line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File «C:UsersWH895NTMiniconda3envscanvaslibrunpy.py», line 96, in run_module_code mod_name, mod_spec, pkg_name, script_name) File «C:UsersWH895NTMiniconda3envscanvaslibrunpy.py», line 85, in _run_code exec(code, run_globals) File «c:UsersWH895NT.vscodeextensionsms-python.python-2021.9.1218897484pythonFilestestlauncher.py», line 44, in run(cwd, testRunner, args) File «c:UsersWH895NT.vscodeextensionsms-python.python-2021.9.1218897484pythonFilestestlauncher.py», line 36, in run pytest.main(args) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestconfig__init_.py», line 143, in main
config = prepareconfig(args, plugins) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestconfig__init_.py», line 319, in prepareconfig pluginmanager=pluginmanager, args=args File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggyhooks.py», line 286, in call return self._hookexec(self, self.get_hookimpls(), kwargs) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggymanager.py», line 93, in _hookexec return self._inner_hookexec(hook, methods, kwargs) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggymanager.py», line 87, in firstresult=hook.spec.opts.get(«firstresult») if hook.spec else False, File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggycallers.py», line 203, in _multicall gen.send(outcome) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytesthelpconfig.py», line 100, in pytest_cmdline_parse config: Config = outcome.get_result() File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggycallers.py», line 80, in get_result raise ex[1].with_traceback(ex[2]) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggycallers.py», line 187, in _multicall res = hook_impl.function(*args) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestconfig__init_.py», line 1003, in pytest_cmdline_parse
self.parse(args)
File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestconfig__init__.py», line 1283, in parse
self.preparse(args, addopts=addopts) File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestconfig__init_.py», line 1172, in preparse self.pluginmanager.load_setuptools_entrypoints(«pytest11») File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagespluggymanager.py», line 299, in load_setuptools_entrypoints plugin = ep.load() File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagesimportlib_metadata__init_.py», line 100, in load
module = import_module(match.group(‘module’))
File «C:UsersWH895NTMiniconda3envscanvaslibimportlib__init__.py», line 127, in import_module
return bootstrap._gcd_import(name[level:], package, level) File «», line 1006, in _gcd_import File «», line 983, in _find_and_load File «», line 967, in _find_and_load_unlocked File «», line 677, in _load_unlocked File «C:UsersWH895NTMiniconda3envscanvaslibsite-packages_pytestassertionrewrite.py», line 170, in exec_module exec(co, module.dict) File «c:userswh895ntminiconda3envscanvaslibsite-packagespytest_covplugin.py», line 6, in import coverage File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagescoverage__init_.py», line 15, in
from coverage.control import Coverage, process_startup
File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagescoveragecontrol.py», line 21, in
from coverage.data import CoverageData, combine_parallel_data
File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagescoveragedata.py», line 17, in
from coverage.sqldata import CoverageData
File «C:UsersWH895NTMiniconda3envscanvaslibsite-packagescoveragesqldata.py», line 15, in
import sqlite3
File «C:UsersWH895NTMiniconda3envscanvaslibsqlite3__init__.py», line 23, in
from sqlite3.dbapi2 import *
File «C:UsersWH895NTMiniconda3envscanvaslibsqlite3dbapi2.py», line 27, in
from _sqlite3 import *
ImportError: DLL load failed: The specified module could not be found.

Desinstalación

Extensiones

Antes de desinstalar VS Code, podría ser conveniente desinstalar las extensiones (plug-ins) que se tengan. Sobre todo si lo que se busca es una nueva instalación «desde cero».

Producto

La forma más simple de desinstalar la aplicación es mediante un desinstalador, como AppCleaner. La forma más ingenua de hacerlo es sólo arrastrando la aplicación al basurero, como muchos indican. El arrastrar la aplicación al Trash sólo hace que se queden regados muchos archivos y directorios creados por la aplicación y debe uno buscar las sobras5,6; más si se trata de una instalación general en un equipo con más de un usuario haciendo uso de la aplicación (ver sección Instalación).

La forma más simple no es perfecta tampoco. Si bien ayuda a identificar muchos archivos de trabajo, habrá varios que se le escaparán y debe uno buscarlos por cada usuario que haya hecho uso de esto6. Adicionalmente, de versión a versión del sistema operativo o Visual Studio Code es posible toparse con archivos de trabajo nuevos.

Monterey
Ventura

Referencias

  1. «Visual Studio Code«, Wikipedia, web. Visited: 2020.05.18. URL: https://en.wikipedia.org/wiki/Visual_Studio_Code.
  2. «Working with Jupyter Notebooks in Visual Studio Code«, visualstudio.com, web. Visited: 2020.05.21. URL: https://code.visualstudio.com/docs/python/jupyter-support#_setting-up-your-environment/.
  3. «Visual Studio Code Tutorial for Beginners – Introduction«, academind.com, YouTube video. Published: 2018.05.24; visited: 2021.08.29. URL: https://youtu.be/VqCgcpAypFQ.
  4. https://www.dev2qa.com/how-to-fix-importerror-dll-load-failed-while-importing-_sqlite3-the-specified-module-could-not-be-found/
  5. «How to completely uninstall vscode on mac«, stackoverflow.com, web. Asked: 2017.03.05; consulted: 2022.05.21. URL: https://stackoverflow.com/questions/42603103/how-to-completely-uninstall-vscode-on-mac.
  6. Eduardo René Rodríguez Ávila, «Desinstalando aplicaciones de mac (5)«, blog. Publicado: 2022.05.21. URL: https://eravila.wordpress.com/2022/05/21/desinstalando-aplicaciones-de-mac-5/.
  7. «Python environments in VS Code«, visualstudio.com, web. Visited: 2023.06.19. URL: https://code.visualstudio.com/docs/python/environments.
  8. «Debugging«, visualstudio.com, web. Visited: 2023.06.19. URL: https://code.visualstudio.com/docs/editor/debugging.

© Todos los derechos reservados.
Dr. Eduardo René Rodríguez Ávila

Creación: 2023.09.19
Última actualización: 2025.11.11

El contenido de este sitio puede ser copiado y reproducido libremente, siempre que no se altere y se cite su origen. Marcas y productos registrados se citan por referencia y sin fines de lucro ni dolo. Todas las opiniones son a título personal del o de los autores de estas y, salvo que se exprese de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello de lo que se trata. Para conocer más sobre la posición de privacidad y responsabilidad respecto de lo que se presenta en este sitio web y de cómo se ha obtenido, consulte la declaración correspondiente.