Skip to content

Commit 045675a

Browse files
committed
Updated for Blender 2.80
1 parent 5841368 commit 045675a

File tree

2 files changed

+62
-61
lines changed

2 files changed

+62
-61
lines changed

README.md

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Blender Debugger for VS Code (and Visual Studio)
22

3-
Inspired by [Blender-VScode-Debugger](https://github.com/Barbarbarbarian/Blender-VScode-Debugger) which was itself inspired by this [remote_debugger](https://github.com/sybrenstuvel/random-blender-addons/blob/master/remote_debugger.py) for pycharm as explained in this [Blender Developer's Blog post](https://code.blender.org/2015/10/debugging-python-code-with-pycharm/).
4-
3+
Inspired by [Blender-VScode-Debugger](https://github.com/Barbarbarbarian/Blender-VScode-Debugger) which was itself inspired by this [remote_debugger](https://github.com/sybrenstuvel/random-blender-addons/blob/master/remote_debugger.py) for pycharm as explained in this [Blender Developer's Blog post](https://code.blender.org/2015/10/debugging-python-code-with-pycharm/).
54

65
Since the VS Code one wasn't really well documented and it looked kind of dead, once I figured it out, I was just going to add the documentation, but then I ended up rewriting the whole thing.
76

@@ -17,12 +16,14 @@ Now it can:
1716

1817
I have made a video (click the image below) for those who just started messing with python in Blender or programming in general, but if you're semi-familiar with Python, VS Code, and the command line the following should make sense. If you have any questions or suggestions, don't hesitate to file an issue.
1918

20-
<strong>NOTE: ptvsd doesn't have to be version 3.0.0 anymore, so you can now ignore that and just `pip install ptvsd`</strong>
19+
#### NOTES/EDITS
20+
- ptvsd doesn't have to be version 3.0.0 anymore, so you can now ignore that and just `pip install ptvsd`
21+
- This video was done with blender 2.79, but everything still works 99% the same. I think the only change is that blender changed the default shortcut to the search menu.
2122

2223
<p align="center" style="position:relative;">
23-
<a href="https://www.youtube.com/watch?v=UVDf2VSmRvk" title="Click to go to Video">
24-
<img alt="youtube video" src="https://img.youtube.com/vi/UVDf2VSmRvk/maxresdefault.jpg" height="300" style="margin:0 auto;" />
25-
</a>
24+
<a href="https://www.youtube.com/watch?v=UVDf2VSmRvk" title="Click to go to Video">
25+
<img alt="youtube video" src="https://img.youtube.com/vi/UVDf2VSmRvk/maxresdefault.jpg" height="300" style="margin:0 auto;" />
26+
</a>
2627
</p>
2728

2829
## Note on Downloading
@@ -34,12 +35,12 @@ If you download the add-on from the releases page, please make sure to rename th
3435
## Installing Python and Getting PTVSD
3536

3637
Install Python 3 with pip and check add to PATH.<sup id="n1">[1](#f1)</sup>
37-
- If you already have python installed and you can run it from the command line (aka PATH is set), the addon should find it. It checks `where python` or `whereis python` or `which python` to try and determine where python is and uses the first path given<sup id="n2">[2](#f2)</sup>.
38-
- If you are using something like Conda and want to use a virtual environment, to have the addon auto-detect the path you can: activate the environment, run Blender from the command line, and it should work.
38+
- If you already have python installed and you can run it from the command line (aka PATH is set), the addon should find it. It checks `where python` or `whereis python` or `which python` to try and determine where python is and uses the first path given<sup id="n2">[2](#f2)</sup>.
39+
- If you are using something like Conda and want to use a virtual environment, to have the addon auto-detect the path you can: activate the environment, run Blender from the command line, and it should work.
3940

4041
`pip install ptvsd`
41-
- The following is no longer the case, the latest ptvsd version should work just fine now. <strike>Newer versions will not work, the add-on will warn you in the console if the version is above 3.0.0. Later versions aren't supported yet in VS Code, and it will throw an error when trying to connect. See [Debugging Python with VS Code](https://code.visualstudio.com/docs/python/debugging#_remote-debugging) and [#514](https://github.com/Microsoft/vscode-python/issues/514).</strike>
42-
- For Visual Studio, later versions should work depending on the Visual Studio version. I have never used Visual Studio, but you can find more info on setting everything up here: [Remotely Debugging Python Code on Linux](https://docs.microsoft.com/en-us/visualstudio/python/debugging-python-code-on-remote-linux-machines#connection-troubleshooting). (it is not Linux specific)
42+
- The following is no longer the case, the latest ptvsd version should work just fine now. <strike>Newer versions will not work, the add-on will warn you in the console if the version is above 3.0.0. Later versions aren't supported yet in VS Code, and it will throw an error when trying to connect. See [Debugging Python with VS Code](https://code.visualstudio.com/docs/python/debugging#_remote-debugging) and [#514](https://github.com/Microsoft/vscode-python/issues/514).</strike>
43+
- For Visual Studio, later versions should work depending on the Visual Studio version. I have never used Visual Studio, but you can find more info on setting everything up here: [Remotely Debugging Python Code on Linux](https://docs.microsoft.com/en-us/visualstudio/python/debugging-python-code-on-remote-linux-machines#connection-troubleshooting). (it is not Linux specific)
4344

4445
## Setting up your Addon
4546

@@ -50,14 +51,14 @@ In Blender go to: `User Preferences > File` and set the path to `Scripts` to the
5051
```
5152
Blender Stuff
5253
└── addons
53-
├── your-addon-folder
54-
├── __init__.py
55-
├── ...etc
56-
├── another-addon
57-
├── ...
54+
├── your-addon-folder
55+
├── __init__.py
56+
├── ...etc
57+
├── another-addon
58+
├── ...
5859
```
5960

60-
Now remove your addon from Blender if it was installed, save settings, and when you restart your addon should be installed automatically.
61+
Now remove your addon from Blender if you had installed it manually already, save settings, and when you restart your addon should be installed automatically.
6162

6263
## Setting up this Addon
6364

@@ -79,16 +80,16 @@ Install the Python extension for VS Code if you haven't already. For Visual Stud
7980

8081
In the lower left ([see #3 here](https://code.visualstudio.com/docs/python/python-tutorial#_prerequisites)), VS Code should have auto detected your Python install and set it as the interpreter. For Visual Studio see [Managing Python Environments](https://docs.microsoft.com/en-us/visualstudio/python/managing-python-environments-in-visual-studio).
8182

82-
Go to the Debugging tab and add a configuration. Pick Python. You'll want the configuration that looks like this, no need to change the defaults, you can delete the rest.
83+
Go to the Debugging tab and add a configuration. Pick Python. You'll want the configuration that looks like this, no need to change the defaults, you can delete the rest.
8384

8485
```JSON
85-
{
86-
"name": "Python: Attach",
87-
"type": "python",
88-
"request": "attach",
89-
"port": 5678, //careful, this used to be 3000 in older versions of vscode and this addon
90-
"host": "localhost"
91-
},
86+
{
87+
"name": "Python: Attach",
88+
"type": "python",
89+
"request": "attach",
90+
"port": 5678, //careful, this used to be 3000 in older versions of vscode and this addon
91+
"host": "localhost"
92+
},
9293
```
9394

9495
Now when you run the debugger with this config in Blender and VS Code the console should print "Debugger is Attached" if it was still waiting (it should still attach even if it wasn't, it just won't tell you).
@@ -108,25 +109,24 @@ From blender you can right click just about anything and click "Edit Source" to
108109
Open the file in VS Code, connect to the debugging server, make a change and save it.
109110

110111
Now in Blender the text editor will show this little red button in the top left. Click that and reload the file. Then in `Text Editor > Properties` turn on `Live Edit` if you haven't already. Now to actually get Blender to detect any changes you made just type a single character (like add a space anywhere) and *then* it will detect your changes.
111-
112-
112+
113113
### Debugging/Editing Scripts
114114

115-
See [Issue #4](https://github.com/AlansCodeLog/blender-debugger-for-vscode/issues/4) for a workaround.
116-
In the future if I have some time, I might see if there's something I can do to make this easier.
115+
See [Issue #4](https://github.com/AlansCodeLog/blender-debugger-for-vscode/issues/4) for a workaround.
116+
In the future if I have some time, I might see if there's something I can do to make this easier.
117117

118118
# Troubleshooting
119119

120120
- Check you installed the correct ptvsd version. With VS Code this should no longer be an issue, but I believe different versions of Visual Studio need different versions of ptvsd (see [Installing Python Support](https://docs.microsoft.com/en-us/visualstudio/python/installing-python-support-in-visual-studio)).
121121
- To determine whether the problem is on Blender's side or your editor's: Close Blender and download/copy this [test script](https://gist.github.com/AlansCodeLog/ff1b246a8e31938e1c3dbfdcbb90522f) and run it with Python, and then try to connect to the server with your editor. If you're still getting problems then the problem is with VS Code, try:
122-
- Check your detected your Python install, or set it manually.
123-
- For VS Code try reinstalling the VS Code Python extension.
122+
- Check your detected your Python install, or set it manually.
123+
- For VS Code try reinstalling the VS Code Python extension.
124124
- If you've been using this addon for a while and it's suddenly giving you a connection error, it might be because the default port has changed. VS Code's Python extension (vscode-python) has changed their default port from 3000 to 5678, so I have changed the default accordingly. I've made it configurable now though, so just check the port the addon is set to matches the one in your `launch.json` in VS Code.
125125

126126
Otherwise, if none of that helped, don't hesitate to file an issue.
127127

128128
# Notes
129129

130-
<a id="f1" href="#n1">1.</a> Technically, the add-on will work with Python 2 as well since it doesn't use Python itself, just the ptvsd package, so it doesn't really matter whether you installed it with Python 2 or 3 because the package is compatible with both. On the VS Code side though, the Python extension does need to know where Python is (though not ptvsd), but it will still connect if it's using Python 2, just IntelliSense recommendations the will be wrong.
130+
<a id="f1" href="#n1">1.</a> Technically, the add-on will work with Python 2 as well since it doesn't use Python itself, just the ptvsd package, so it doesn't really matter whether you installed it with Python 2 or 3 because the package is compatible with both. On the VS Code side though, the Python extension does need to know where Python is (though not ptvsd), but it will still connect if it's using Python 2, but your IntelliSense recommendations will be wrong in VS Code.
131131

132-
<a id="f2" href="#n2">2.</a> The addon also detects python if PYTHONPATH is set (because Blender will add it to sys.path) or if you used the Python bundled with Blender to install ptvsd (but that's a bit of a pain because it doesn't have pip installed, you would have to install it manually).
132+
<a id="f2" href="#n2">2.</a> The addon also detects python if PYTHONPATH is set (because Blender will add it to sys.path) or if you used the Python bundled with Blender to install ptvsd (but that's a bit of a pain because it doesn't have pip installed, you would have to install it manually).

__init__.py

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
bl_info = {
2222
'name': 'Debugger for VS Code',
2323
'author': 'Alan North',
24-
'version': (0, 3, 0),
25-
'blender': (2, 79, 0),
24+
'version': (1, 0, 0),
25+
'blender': (2, 80, 0),
2626
"description": "Starts debugging server for VS Code.",
27-
'location': 'In search (default shortcut:space) type "Debug"',
27+
'location': 'In search (Edit > Operator Search) type "Debug"',
2828
"warning": "",
2929
"wiki_url": "https://github.com/AlansCodeLog/blender-debugger-for-vscode",
3030
"tracker_url": "https://github.com/AlansCodeLog/blender-debugger-for-vscode/issues",
@@ -54,7 +54,7 @@ def check_for_ptvsd():
5454
stdout=subprocess.PIPE,
5555
stderr=subprocess.PIPE
5656
)
57-
except Exception:
57+
except Exception:
5858
continue
5959
if location is not None:
6060
location = str(location.communicate()[0], "utf-8")
@@ -63,37 +63,37 @@ def check_for_ptvsd():
6363
#extract path up to last slash
6464
match = re.search(".*(/)", location)
6565
if match is not None:
66-
match = match.group()
66+
match = match.group()
6767
if os.path.exists(match+"lib/site-packages/ptvsd"):
6868
match = match+"lib/site-packages"
6969
return match
7070

7171
#check in path just in case PYTHONPATH happens to be set
7272
for path in sys.path:
73-
if os.path.exists(path+"\ptvsd"):
73+
if os.path.exists(path+"/ptvsd"):
7474
return path
75-
if os.path.exists(path+"\site-packages\ptvsd"):
76-
return path+"\site-packages"
77-
if os.path.exists(path+"\lib\site-packages\ptvsd"):
78-
return path+"lib\site-packages"
75+
if os.path.exists(path+"/site-packages/ptvsd"):
76+
return path+"/site-packages"
77+
if os.path.exists(path+"/lib/site-packages/ptvsd"):
78+
return path+"lib/site-packages"
7979
return "PTVSD not Found"
8080

8181
# Preferences
8282
class DebuggerPreferences(bpy.types.AddonPreferences):
8383
bl_idname = __name__
8484

85-
path = bpy.props.StringProperty(
85+
path: bpy.props.StringProperty(
8686
name="Location of PTVSD",
8787
subtype="DIR_PATH",
8888
default=check_for_ptvsd()
8989
)
9090

91-
timeout = bpy.props.IntProperty(
91+
timeout: bpy.props.IntProperty(
9292
name="Timeout",
9393
default=20
9494
)
9595

96-
port = bpy.props.IntProperty(
96+
port: bpy.props.IntProperty(
9797
name="Port",
9898
min=0,
9999
max=65535,
@@ -125,11 +125,11 @@ def check_done(i, modal_limit, prefs):
125125
return {"PASS_THROUGH"}
126126
print('Debugger is Attached')
127127
return {"FINISHED"}
128-
128+
129129
class DebuggerCheck(bpy.types.Operator):
130130
bl_idname = "debug.check_for_debugger"
131131
bl_label = "Debug: Check if VS Code is Attached"
132-
bl_description = "Starts modal timer that checks if debugger attached until attached or until timeout."
132+
bl_description = "Starts modal timer that checks if debugger attached until attached or until timeout"
133133

134134
_timer = None
135135
count = 0
@@ -139,18 +139,18 @@ class DebuggerCheck(bpy.types.Operator):
139139
def modal(self, context, event):
140140
self.count = self.count + 1
141141
if event.type == "TIMER":
142-
prefs = bpy.context.user_preferences.addons[__name__].preferences
142+
prefs = bpy.context.preferences.addons[__name__].preferences
143143
return check_done(self.count, self.modal_limit, prefs)
144-
return {"PASS_THROUGH"}
144+
return {"PASS_THROUGH"}
145145

146146
def execute(self, context):
147147
# set initial variables
148148
self.count = 0
149-
prefs = bpy.context.user_preferences.addons[__name__].preferences
149+
prefs = bpy.context.preferences.addons[__name__].preferences
150150
self.modal_limit = prefs.timeout*60
151151

152152
wm = context.window_manager
153-
self._timer = wm.event_timer_add(0.1, context.window)
153+
self._timer = wm.event_timer_add(0.1, window=context.window)
154154
wm.modal_handler_add(self)
155155
return {"RUNNING_MODAL"}
156156

@@ -159,22 +159,22 @@ def cancel(self, context):
159159
wm = context.window_manager
160160
wm.event_timer_remove(self._timer)
161161

162-
class DebugServerStart(bpy.types.Operator):
162+
class DebugServerStart(bpy.types.Operator):
163163
bl_idname = "debug.connect_debugger_vscode"
164164
bl_label = "Debug: Start Debug Server for VS Code"
165-
bl_description = "Starts ptvsd server for debugger to attach to."
166-
165+
bl_description = "Starts ptvsd server for debugger to attach to"
166+
167167
def execute(self, context):
168168
#get ptvsd and import if exists
169-
prefs = bpy.context.user_preferences.addons[__name__].preferences
169+
prefs = bpy.context.preferences.addons[__name__].preferences
170170
ptvsd_path = prefs.path
171171
ptvsd_port = prefs.port
172172

173173
#actually check ptvsd is still available
174174
if ptvsd_path == "PTVSD not Found":
175175
self.report({"ERROR"}, "Couldn't detect ptvsd, please specify the path manually in the addon preferences or reload the addon if you installed ptvsd after enabling it.")
176176
return {"CANCELLED"}
177-
177+
178178
if not os.path.exists(os.path.abspath(ptvsd_path+"/ptvsd")):
179179
self.report({"ERROR"}, "Can't find ptvsd at: %r/ptvsd." % ptvsd_path)
180180
return {"CANCELLED"}
@@ -194,12 +194,13 @@ def execute(self, context):
194194
# call our confirmation listener
195195
bpy.ops.debug.check_for_debugger()
196196
return {"FINISHED"}
197-
198-
def register():
199-
bpy.utils.register_module(__name__)
200197

201-
def unregister():
202-
bpy.utils.unregister_module(__name__)
198+
classes = (
199+
DebuggerPreferences,
200+
DebuggerCheck,
201+
DebugServerStart,
202+
)
203+
register, unregister = bpy.utils.register_classes_factory(classes)
203204

204205
if __name__ == "__main__":
205206
register()

0 commit comments

Comments
 (0)