У меня есть Django проект в коде Visual Studio. Я запускаю его через виртуальную машину (linux), используя Docker. Я хочу иметь возможность отладки проекта путем добавления точек останова.
Я пытался следовать этому руководству, но не могу его получить: https://code.visualstudio.com/docs/containers/debug-python
Приложение запускается в "localhost: 8000" частный IP-адрес физической машины - 192.168.0.102, а виртуальной машины - 192.168.56.1.
Запуск моего файла. json:
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "192.168.56.1",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/code"
}
]
}
Мои views.py:
# -*- coding: utf-8 -*-
import tempfile, time
import json
import ptvsd
ptvsd.enable_attach(address=('192.168.56.1', 5678)) #This is ok?
ptvsd.wait_for_attach()
...
Ошибка:
csuperior-web | Performing system checks...
csuperior-web |
csuperior-web | Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f4742165b70>
csuperior-web | Traceback (most recent call last):
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
csuperior-web | fn(*args, **kwargs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
csuperior-web | self.check(display_num_errors=True)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 359, in check
csuperior-web | include_deployment_checks=include_deployment_checks,
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 346, in _run_checks
csuperior-web | return checks.run_checks(**kwargs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 81, in run_checks
csuperior-web | new_errors = check(app_configs=app_configs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 16, in check_url_config
csuperior-web | return check_resolver(resolver)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 26, in check_resolver
csuperior-web | return check_method()
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 254, in check
csuperior-web | for pattern in self.url_patterns:
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
csuperior-web | res = instance.__dict__[self.name] = self.func(instance)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 405, in url_patterns
csuperior-web | patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
csuperior-web | res = instance.__dict__[self.name] = self.func(instance)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 398, in urlconf_module
csuperior-web | return import_module(self.urlconf_name)
csuperior-web | File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
csuperior-web | return _bootstrap._gcd_import(name[level:], package, level)
csuperior-web | File "<frozen importlib._bootstrap>", line 994, in _gcd_import
csuperior-web | File "<frozen importlib._bootstrap>", line 971, in _find_and_load
csuperior-web | File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
csuperior-web | File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
csuperior-web | File "<frozen importlib._bootstrap_external>", line 678, in exec_module
csuperior-web | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
csuperior-web | File "/code/ConsejoSuperior/urls.py", line 28, in <module>
csuperior-web | url(r'^reunion/', include('reunion.urls', namespace='reunion')),
csuperior-web | File "/usr/local/lib/python3.6/site-packages/django/conf/urls/__init__.py", line 50, in include
csuperior-web | urlconf_module = import_module(urlconf_module)
csuperior-web | File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
csuperior-web | return _bootstrap._gcd_import(name[level:], package, level)
csuperior-web | File "<frozen importlib._bootstrap>", line 994, in _gcd_import
csuperior-web | File "<frozen importlib._bootstrap>", line 971, in _find_and_load
csuperior-web | File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
csuperior-web | File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
csuperior-web | File "<frozen importlib._bootstrap_external>", line 678, in exec_module
csuperior-web | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
csuperior-web | File "/code/reunion/urls.py", line 4, in <module>
csuperior-web | from reunion.views import generar_temario_pdf, generar_convocatoria_pdf, \
csuperior-web | File "/code/reunion/views.py", line 5, in <module>
csuperior-web | ptvsd.enable_attach(address=('192.168.56.1', 5678))
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/attach_server.py", line 101, in enable_attach
csuperior-web | ptvsd_enable_attach(address)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/_remote.py", line 64, in enable_attach
csuperior-web | **kwargs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/pydevd_hooks.py", line 128, in install
csuperior-web | daemon = Daemon(**kwargs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 503, in __init__
csuperior-web | super(Daemon, self).__init__(wait_for_user, **kwargs)
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 100, in __init__
csuperior-web | self._install_exit_handlers()
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 425, in _install_exit_handlers
csuperior-web | self._exithandlers.install()
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/exit_handlers.py", line 62, in install
csuperior-web | self._install_signal_handler()
csuperior-web | File "/usr/local/lib/python3.6/site-packages/ptvsd/exit_handlers.py", line 103, in _install_signal_handler
csuperior-web | orig[sig] = signal.signal(sig, self._signal_handler)
csuperior-web | File "/usr/local/lib/python3.6/signal.py", line 47, in signal
csuperior-web | handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
csuperior-web | ValueError: signal only works in main thread
Спасибо!