我的设置如下: - 在端口映射中运行的django服务器:8090:8090 - 带PyDev的Eclipse
我希望能够在Pydev上放置断点(点击一行,一步一步)
我发现了几篇文章; http://www.pydev.org/manual_adv_remote_debugger.html
但它仍无法正常工作。
1)我应该将manage.py更新为"导入pydev" ?要添加哪些行,是否必须在docker容器中复制pydev插件的pysrc以便能够进行模块导入?
2)是否需要端口转发?运行到docker的python实例应该可以访问主机上的远程调试服务器吗?
3)我发现有关使用ssh的pycharm和远程调试的文章?不可能与pydev做类似的事情吗?
4)如何"链接"我的本地目录和docker"目录" ?
[编辑]我找到了解决方案
将eclipse / path_to \ pydev \ plugins \ org.python.pydev \ pysrc目录复制到docker容器可以访问的位置。
编辑pysrc / pydevd_file_utils.py,并在主机和docker容器之间添加目录映射,如: PATHS_FROM_ECLIPSE_TO_PYTHON = [(r' C:/ django',r' /.../ lib / django'), (R' C:/工作区/ MyApp的',R' /无功/网络/ MyApp的&#39)] 如果你有几个包含python代码的路径
编辑manage.py并添加以下内容
sys.path.append(' / my_path的/ to_pysrc_ / under_docker / pysrc') 导入pydevd pydevd.settrace(host =' 172.17.42.1')你主人的#IP
在Pydev中,首选项> Pydev>运行/调试>远程调试器的端口:5678
在Debug Perspective中,单击"启动Pydev服务器"
运行:python manage.py runserver 0.0.0.0:8090 --noreload
(用你的http端口替换8090)
在Pydev中:你会看到代码在settrace之后就破了!
现在您可以添加一些断点并使用Pydev的调试CLI :)享受!
答案 0 :(得分:1)
我有类似的问题 - 在docker中的django项目,通过pycharm 145.1504和amp;连接到docker。 162.1120通过docker interpreter,运行服务器工作正常,但调试是pycharm运行后的堆栈
/usr/bin/python2.7 -u /root/.pycharm_helpers/pydev/pydevd.py --multiproc --qt-support --client' 0.0.0.0' --port 38324 --file /opt/project/manage.py runserver 0.0.0.0:8000。
我试图找出原因几天,然后通过ssh连接将pycharm连接到docker,一切正常,运行和调试。
答案 1 :(得分:0)
好吧,根据您所写的内容,我将假定您有一个在本地计算机上运行的Django Docker容器。
从容器内部(例如docker-compose exec <container name> bash
进入容器)
pip install pydevd
在Eclipse中,放置一个这样的断点:
import pydevd; pydevd.settrace('docker.for.mac.localhost')
如果您不使用Mac的Docker,则必须做一些工作才能从容器内部获取计算机的IP,例如参见https://github.com/gruby-murzyn/agency/tree/master/majeni。
转到Debug Perspective并启动PyDev调试服务器
启动您的应用程序或测试
...,随着代码在断点处停止,您应该看到堆栈,变量等的视图。
在Python 3.7中,现在有一个内置的断点,您可以使用环境变量(默认值为pdb
)将其配置为指向您喜欢的调试器:
breakpoint()
它也带有参数,因此您可以执行以下操作:
breakpoint(host='docker.for.mac.localhost')
我发现键入起来有点烦人,所以最终我将一个看起来像这样的模块放入应用程序中:
# my_app/pydevd.py
import pydevd
def set_trace():
pydevd.settrace('docker.for.mac.localhost')
然后,我为内置断点设置环境变量(例如在您的docker-compose.yml
中):
PYTHONBREAKPOINT=my_app.pydevd.set_trace