My settings - Odoo 12, Visual Studio Code 1.40.0, Linux
Building on Adeel Rizvi's post - thanks a lot! Updated for Linux and for newer VSCode.
I spent better part of the day to make it work. I use a multi-instance setup for Odoo, which didn't help at all.
For debugging, I needed to sort out the permissions hick-ups, so I decided to run the debugging instance as a current user. In the next commands, always replace myuser
by your actual user name. Using my odoo70
user was a no-go, as it couldn't access the vscode stuff in my home folder, including the debugger.
I copied the Odoo stuff to /opt/odoo70l
, did sudo chown -R myuser:users /opt/odoo70l
and created a new postgres user sudo su - postgres -c "createuser --createdb --username postgres --no-createrole --no-superuser --no-password myuser"
to keep being able to use peer authentication. That also required changing the database user to myuser
in the config file - for me /opt/odoo70l/odoo70l.conf
. (Note that it will make the previous databases inaccessible for the debugging instance - either change their owner, or export and import under the new user.) I also commented out the logfile there so it would print logs directly to the terminal.
I have my workspace in /opt/odoo-dev/
and its subfolders contain projects with modules I work on. I use multi-root workspace to be able to also peek into the base Odoo code.
My workspace options (/opt/odoo-dev/workspace-name.code-workspace
):
(Each of my Odoo instances have their own python venv - if you don't use that, remember to edit python.pythonPath
to /usr/bin/python3
or wherever your which python3
points to.)
{
"folders": [
{
"path": "."
},
{
"path": "/opt/odoo70l"
},
],
"settings": {
"python.pythonPath": "/opt/odoo70l/odoo-venv/bin/python3",
"python.linting.pylintEnabled": false,
// use this so the autocompleate/goto definition will work with python extension
"python.autoComplete.extraPaths": [
"/opt/odoo70l/odoo/addons",
"/opt/odoo70l/odoo",
"/opt/odoo70l/odoo/odoo/addons"
],
//"python.linting.pylintPath": "optional: path to python use if you have environment path",
"python.linting.enabled": false,
//load the pylint_odoo
"python.linting.pylintArgs": [
"--load-plugins",
"pylint_odoo"
],
"python.formatting.provider": "yapf",
//"python.formatting.yapfPath": "optional: path to python use if you have environment path",
// "python.linting.pep8Path": "optional: path to python use if you have environment path",
"python.linting.pep8Enabled": true,
// add this auto-save option so the pylint will sow errors while editing otherwise
//it will only show the errors on file save
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 500,
// The following will hide the compiled file in the editor/ add other file to hide them from editor
"files.exclude": {
"**/*.pyc": true
}
},
}
My /opt/odoo-dev/.vscode/launch.json
(only the first block is important, rest is left there from default VSCode configuration in case you want to do other Python debugging as well):
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Odoo 12 myuser",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"console": "externalTerminal",
"program": "/opt/odoo70l/odoo/odoo-bin",
"args": [
"--config=/opt/odoo70l/odoo70l.conf",
],
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
},
{
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "."
}
]
},
{
"name": "Python: Module",
"type": "python",
"request": "launch",
"module": "enter-your-module-name-here",
"console": "integratedTerminal"
},
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"console": "integratedTerminal",
"args": [
"runserver",
"--noreload",
"--nothreading"
],
"django": true
},
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"jinja": true
},
{
"name": "Python: Current File (External Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "externalTerminal"
}
]
}