# Developing Slicer modules in Visual Studio / Visual Studio Code?

**URL:** <https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496>\
**Category:** Development\
**Created:** [December 14, 2019, 2:58pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496 "2019-12-14T14:58:35Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 14, 2019, 2:58pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/1 "2019-12-14T14:58:35Z")

</div>

I´m a newbie in module scripting and I should like to manage code with Visual Studio or Visual Studio Code instead of Notepad++.  
How can I setup VS/VSC for this porpuse? Is there any tutorial o video about?

Thanks on advance

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 14, 2019, 5:56pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/2 "2019-12-14T17:56:07Z")

</div>

Slicer will open .py files with the editor you configured in you Windows system settings (file associations), but you can open the files in any editor. You can also do [step-by-step debugging in Visual Studio Code, Visual Studio, PyCharm, Eclipse, LiClipse, etc.](https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DebuggingTools#Visual_Python_debugging_in_PyCharm).

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 14, 2019, 6:03pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/3 "2019-12-14T18:03:37Z")

</div>

I have Debug Connection made, but Slicer Python libraries are not recognited by Visual Studio Code. This is my real issue. How can I add them?

---

<div class="post-metadata">

**Author:** ![Alex\_Vergara](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alex_vergara/32/15205_2.png) [@Alex\_Vergara](https://discourse.slicer.org/u/Alex_Vergara)\
**Post date:** [December 14, 2019, 8:23pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/4 "2019-12-14T20:23:22Z")

</div>

In VScode you need to configure your python module, just let VSCode know you want the one in Slicer, `{"python.pythonpath"="/path/to/slicer/bin/PythonSlicer"} ` in your project configuration `/project/folder/.vscode/settings.json`. Thats it, now you need to install pylint, rope and autopep8 inside Slicer with normal `slicer.util.pip_install("pylint")` , now your vscode works natively in Slicer.

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 15, 2019, 3:56pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/5 "2019-12-15T15:56:49Z")

</div>

Thanks @Alex_Vergara for your reply.  
It looks a not so easy procedure for newbies…  
It should be nice to have any kind of stpe-by-step tutorial. I´ve been surfing Developer Documentation and I couldn´t find it.

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 15, 2019, 11:34pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/6 "2019-12-15T23:34:20Z")

</div>

I’ve executed `slicer.util.pip_install("pylint rope autopep8")` in Slicer’s Python console and set `python.pythonpath` in VS Code to `c:\Users\andra\AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-11\bin\PythonSlicer.exe`. After this I restarted VS Code, opened a file, and entered:

```python
import vtk
a=vtk.vtkImageData()
a.Get

```

At this point, I would expect pressing Ctrl-space would bring up Get… methods of vtkImageData, but only a few method names show up (that are used in the file).

@Alex_Vergara does auto-complete or documentation work for you for VTK and Slicer classes? Do you use Jedi as IntelliSense engine (`python.jediEnabled`)? Seeing a few screenshots and/or videos about what you have working in VS Code would be great.

---

<div class="post-metadata">

**Author:** ![Alex\_Vergara](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alex_vergara/32/15205_2.png) [@Alex\_Vergara](https://discourse.slicer.org/u/Alex_Vergara)\
**Post date:** [December 16, 2019, 8:47am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/7 "2019-12-16T08:47:26Z")

</div>

Here you can see VSCode recognizes the python inside Slicer

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/5/4/5489b1f30c7d96098721ba239fc5db2336250fa6.png)

My settings.json inside project .vscode folder  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/b/f/bf08e6c3490960a5f41c447ab55050ae159866ad.png)

the vscode general settings.json

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/8/1/81a5ea4937688733ef802ac2282c817d180c776f.png)

You need to add the extrapaths to your python, I know I have them in the wrong place, but I am being lazy to move them. anyways, you need the python.autocomplete.extrapaths added to your settings too.  
As you can see ctrl+space already gives me all necesary hints

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/e/0/e092cfd6da8c0c11ed6759580d8cb4f98c79dbae.png)

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 16, 2019, 9:20pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/8 "2019-12-16T21:20:30Z")

</div>

This is for Linux, right? What “settings.json” and “extrapaths” should I have to change in Windows?  
Thanks

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 16, 2019, 10:11pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/9 "2019-12-16T22:11:04Z")

</div>

On Windows, I’ve tried to add the extra paths but nothing changed. It still does not recognize anything.

---

<div class="post-metadata">

**Author:** ![Alex\_Vergara](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alex_vergara/32/15205_2.png) [@Alex\_Vergara](https://discourse.slicer.org/u/Alex_Vergara)\
**Post date:** [December 18, 2019, 10:09am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/10 "2019-12-18T10:09:10Z")

</div>

Ok, I have fixed my settings to be module specific, now they are as

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/5/6/56ba227d72d5156243014c84a591ce1af8332632.png)

and this worked for me in mac, linux and windows

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 18, 2019, 2:04pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/11 "2019-12-18T14:04:31Z")

</div>

This sounds very promising! Can you copy here your settings for Windows? (and if possible, not as screenshot, but as text) Thank you.

---

<div class="post-metadata">

**Author:** ![jamesobutler](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jamesobutler/32/7511_2.png) [@jamesobutler](https://discourse.slicer.org/u/jamesobutler)\
**Post date:** [December 18, 2019, 5:59pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/12 "2019-12-18T17:59:44Z")

</div>

I was able to get auto completion within Visual Studio Code on Windows following these settings:

“C:\Users\JamesButler\AppData\Roaming\Code\User\settings.json”

```json
{
    "python.pythonPath": "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\bin\\SlicerPython",
    "python.autoComplete.extraPaths": [
        "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\",
        "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\lib\\Python",
        "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\lib\\QtPlugins",
        "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\lib\\Slicer-4.11",
        "C:\\Program Files\\Slicer 4.11.0-2019-12-06\\bin",
    ],
}

```

 ![autocomplete-vscode](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/c/c/cca409297d451a71b3efaf4fcb5fbad2c6046311.png)

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 18, 2019, 7:13pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/13 "2019-12-18T19:13:03Z")

</div>

Thanks! Do you have auto-complete for VTK or Slicer MRML classes, too?

---

<div class="post-metadata">

**Author:** ![jamesobutler](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jamesobutler/32/7511_2.png) [@jamesobutler](https://discourse.slicer.org/u/jamesobutler)\
**Post date:** [December 18, 2019, 7:57pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/14 "2019-12-18T19:57:17Z")

</div>

It appears to only be working for these pure python modules like `util` with the settings that I used.

In the image below you can see some of the auto-complete for the slicer module (there are more if I scrolled down in the pop-up). There is no mrmlScene so unfortunately no `slicer.mrmlScene.XX` auto-complete. Also missing items for vtk. Maybe a setting can be changed, but I was just using the reference from @Alex_Vergara.  
 ![autocomplete-vscode2](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/7/3/73ee0c0c78999f5ed5c0cb3480730997760b418c.png)

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 18, 2019, 11:04pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/15 "2019-12-18T23:04:25Z")

</div>

Ok. Now, I have libraries recognition and it´s really cool. I still have problems with pylint rope and autopep8. Python console throw this error.

![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/2/4/2418717e6aeb0a0145d80beb62d5ac0ca011797e.png)

Thank you all.

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 19, 2019, 4:05am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/16 "2019-12-19T04:05:16Z")

</div>

The package name is `slicer.util` (and not `slicer.utils`).

---

<div class="post-metadata">

**Author:** ![Alex\_Vergara](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alex_vergara/32/15205_2.png) [@Alex\_Vergara](https://discourse.slicer.org/u/Alex_Vergara)\
**Post date:** [December 19, 2019, 5:50am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/17 "2019-12-19T05:50:05Z")

</div>

In windows project settings does not work, you need to edit global settings for vscode for it to work. Here it is my settings.json in `C:\Users\alexv\AppData\Roaming\Code\User\settings.json`

```json
{
    "python.pythonPath": "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\bin\\PythonSlicer.exe",
    "python.linting.pylintPath": "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\Python\\Scripts\\pylint.exe",
    "python.formatting.autopep8Path": "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\Python\\Scripts\\autopep8.exe",
    "python.autoComplete.extraPaths": [
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\",
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\bin\\",
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\Python\\",
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\QtPlugins\\",
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\Slicer-4.11\\",
        "C:\\Users\\alexv\\AppData\\Local\\NA-MIC\\Slicer 4.11.0-2019-11-05\\lib\\Python\\Scripts\\",
    ],
    "python.linting.enabled": true,
    "git.autofetch": true
}

```

And you don’t need any python installed in your system, just python extension in vscode.

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/5/e/5ead30756b76bebc3c3d905314ed916fafb9192b.png)

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 20, 2019, 3:28am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/18 "2019-12-20T03:28:16Z")

</div>

Thank you. With the above settings I get auto-complete for native python classes (slicer.util, etc). This is good! Even VTK and other C++ wrapped libraries show up and classes are listed, but unfortunately method names and method documentation does not show up and auto-complete does not work either.

Maybe VTK’s Python wrapping could be made more friendly to IDEs, but with this we’ll have to wait until we upgrade to latest VTK master early next year.

---

<div class="post-metadata">

**Author:** ![Alex\_Vergara](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alex_vergara/32/15205_2.png) [@Alex\_Vergara](https://discourse.slicer.org/u/Alex_Vergara)\
**Post date:** [December 20, 2019, 8:53am UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/19 "2019-12-20T08:53:33Z")

</div>

I think that is because vtk and ctk are located in a very different folder

```auto
E15TY:dosimetry4d alexvergaragil$ ls /Applications/Slicer.app/Contents/bin/Python/
SlicerWizard ctk mrml.py qt slicer vtkAddon.py vtkSegmentationCore.py vtkmodules
__pycache__ freesurfer.py mrmlDisplayableManager sitkUtils.py vtk.py vtkITK.py vtkTeem.py

```

So adding it to autocomplete paths

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/a/9/a99666b980f719501b6815e286ea8202d507a8ed.png)  
and  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/6/9/697b8c0cd794bc9980eb863ee9510cb890524a95.png)

My configuration file is now

```auto
{
    "python.pythonPath": "/Applications/Slicer.app/Contents/bin/SlicerPython",
    "python.autoComplete.extraPaths": [
        "/Applications/Slicer.app/Contents",
        "/Applications/Slicer.app/Contents/lib/Python",
        "/Applications/Slicer.app/Contents/lib/QtPlugins",
        "/Applications/Slicer.app/Contents/lib/Slicer-4.11",
        "/Applications/Slicer.app/Contents/bin/",
        "/Applications/Slicer.app/Contents/bin/Python/",
        "/Applications/Slicer.app/Contents/bin/Python/vtkmodules"
    ],
    "python.linting.pylintPath": "/Applications/Slicer.app/Contents/lib/Python/bin/pylint",
    "python.formatting.autopep8Path": "/Applications/Slicer.app/Contents/lib/Python/bin/autopep8",
    "python.linting.enabled": true,
    "git.autofetch": true
}

```

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [December 21, 2019, 7:09pm UTC](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496/20 "2019-12-21T19:09:18Z")

</div>

I still have problems trying to fix Visual Studio Code configuration for Windows.

Proposed steps:

1º - Open Slicer Python Interector and install pylint, rope and autopep8:  
slicer.util.pip\_install(“pylint rope autopep8”)

2º - Open Visual Studio Code settings.json (located in C:\Users"user"\AppData\Roaming\Code\User)

3º - Items to add:

> {  
> “python.pythonpath”: “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\bin\SlicerPython.exe”,  
> “python.linting.pylintPath”: “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Python\Lib\site-packages\pylint\”,  
> “python.formatting.autopep8Path”: “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Python\Scripts\autopep8.exe”,  
> “python.autoComplete.extraPaths”: [  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Python\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\QtPlugins\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Slicer-4.11\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\bin\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Python\Lib\site-packages\”,  
> “C:\Users\ **user** \AppData\Local\NA-MIC\Slicer 4.11.0-2019-12-02\lib\Python\Scripts\”,  
> ],  
> “python.linting.enabled”: true,  
> “git.autofetch”: true  
> }

Now I have no errors in VSC but autocomplete is not working.

I´ve tried @Alex_Vergara code but VSCode throws error in import libraries and others…

I have no clear idea of which are the right directies of Slicer we need to add to extraPaths nor there is any difference between pythonpath “SlicerPython” or “PythonSlicer.exe”.

If this issue is fixed, muybe it should be added to documentation …

Thanks to all

[Next page](https://discourse.slicer.org/t/developing-slicer-modules-in-visual-studio-visual-studio-code/9496.md?page=2)
