(Visual Studio Code) Cómo utilizar el interprete de Python del contenedor de Odoo. #23
Unanswered
Jose-Vizcaya
asked this question in
Odoo tools
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Este discussion viene a existir ya que el interprete de python donde corre el servicio de Odoo se aloja en un contenedor, por ende los editores de código no son capaces de detectar las librerías que conforman las dependencias de este mismo. Así mismo ser incapaces de detectar al propio Odoo siendo incapaces de favoreces herramientas como los diferentes linters, LSP entre las demás que puedan conformar el entorno de desarrollo que favorezcan la productividad en Python.
Cabe resaltar que por el momento solo se cubrirá lo que viene siendo
Visual Studio Code, sin embargo cada editor de código o IDE especializado en Python tiene su manera particular de implementar conexiones hacia un contenedor de Docker.Instalación
Dev Containers.Alt + Shift + P, básicamente) buscamos la opciónDev Containers: Add Dev Container Configuration Files...From 'docker-compose.yml'Ok(Igualmente si ven algo que pueda ser de utilidad allí, no olviden en comentarlo)Configuración
Si siguieron los pasos correctamente les tuvo que crear una carpeta
.devcontainer, la cual tiene un archivo JSON llamado devcontainer con una configuración básica como esta:{ // Update the 'dockerComposeFile' list if you have more compose files or use different names. // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make. "name": "Existing Docker Compose (Extend)", "dockerComposeFile": [ "../docker-compose.yml", "docker-compose.yml" ], // The 'service' property is the name of the service for the container that VS Code should // use. Update this value and .devcontainer/docker-compose.yml to the real service name. "service": "odoo-container", // The optional 'workspaceFolder' property is the path VS Code should open by default when // connected. This is typically a file mount in .devcontainer/docker-compose.yml "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}" // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Uncomment the next line if you want start specific services in your Docker Compose config. // "runServices": [], // Uncomment the next line if you want to keep your containers running after VS Code shuts down. // "shutdownAction": "none", // Uncomment the next line to run commands after the container is created. // "postCreateCommand": "cat /etc/os-release", // Configure tool-specific properties. // "customizations": {}, // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. // "remoteUser": "devcontainer" }De allí lo que realmente nos interesa es
dockerComposeFilepara indicar en donde se encuentra el archivo que queremos que se ejecute al abrir el Dev Container, "workspaceFolder" puesto que esta debe ser la ruta que tiene los módulos personalizados de Odoo (Ya sean los custom o los de Integra) que estemos trabajando. Aquí también agregaremos un par de configuraciones adicionales, que son muy importantes.Workspace
Si intentamos reabir Visual Studio Code como un Dev Container, este no hallará una ruta como workspace, puesto que no lo hemos definido aún, para solventar esto, simplemente agregamos
Utilizamos la ruta
/mnt/, pues en eldocker-compose.ymlestá definido que las carpetas de Enterprise, módulos integra y custom, tengan sus respectivos volúmenes en esa ruta padre. Con esto al reabrir el Dev Container, notaremos que una vez haya cargado todo, aparecerán los volúmenes que se encuentran definidos allí.Habilitar Interprete y extensiones.
Cuando volvamos a abrir Visual Studio Code como un Dev Container, no siempre se seleccionará el interprete que esté por defecto en el contenedor, tampoco tendremos a disposición todas nuestras extensiones, lo podremos notar pues nos aparecerá una opción para instalar aquellas extensiones que están instaladas de forma local.
Para evitar esos problemas agregaremos lo siguiente:
De esta forma, cuando volvamos a abrir el Dev Container, Visual Studio Code será capaz de detectar el interprete de python que está en el contenedor, además de que nos instalar/habilitará, en este caso, las extensiones más esenciales para desarrollar en python (Las cuales ya deberías de haberlas instalado previamente). Además, claro está, allí pueden colocar las demás extensiones que les aparezcan inhabilitadas y formen parte de su entorno de trabajo.
No poder editar archivos.
Muy posiblemente al intentar editar algún archivo, nos lance un error relacionado a permisos de usuario. Esto es totalmente normal, ya que los volúmenes con Enterprise y los módulos custom están en la ruta `/mnt/``, la cual por defecto solamente tiene permisos de escritura para el root del sistema. Para ello tan solo agregaremos lo siguiente:
Con esto al entrar al Dev Container, automáticamente estaremos accediendo como el usuario root del contenedor de Odoo.
Dev Container
Una vez hayamos agregado todas las configuraciones necesarias, nos debería quedar un archivo JSON de la siguiente forma:
{ "name": "Existing Docker Compose (Extend)", "dockerComposeFile": [ "../docker-compose.yml", ], "service": "odoo-container", "remoteUser": "root", "workspaceFolder": "/mnt/", "customizations": { "vscode": { "settings": { "python.defaultInterpreterPath": "/usr/bin/python3" }, "extensions": [ "njpwerner.autodocstring", "ms-python.black-formatter", "ms-toolsai.jupyter", "ms-python.vscode-pylance", "ms-python.python", ] } } }Ya con esto podremos trabajar tranquilamente con Python, Odoo y sus dependencias y disfrutar del Linting, auto-completado, sugerencias, entre otras cosas.
Sugerencias
Agreguen el pylint_odoo al Dockerfile, puesto que este no viene instalado por defecto, y aunque lo instalen dentro del contenedor, este suele borrarse al apagar el contenedor (Al menos a mí me sucedió), por lo que pueden agregar esta línea:
Beta Was this translation helpful? Give feedback.
All reactions