当前位置: 首页 > 知识库问答 >
问题:

Pycharm 2017.1 EAP Python控制台和远程Docker解释器不能一起工作

姜智渊
2023-03-14

我已经创建了一个纯Python项目,使用minimum/docker django mysite映像来测试Python控制台特性。

我已经使用本地Python解释器测试了Python控制台,它工作正常。

但当我将解释器更改为远程Docker解释器时,我得到的只是以下输出:

22c422193587:python/opt/.pycharm_helpers/pydev/pydevconsole.py 0

PyDev控制台:正在启动。无法连接到控制台进程。

过程结束,退出代码137(被信号9:SIGKILL中断)

现在,我已经能够在容器运行时(在超时之前)将bash shell执行到容器中,并看到控制台进程已经启动,并且正在随机端口上监听。

此外,该临时容器的Docker日志显示了两个数字,其中一个是它正在侦听的同一个本地端口(因此我猜另一个与预期要连接的外部主机端口或类似端口有关)。

时间流逝,进程和容器被终止。

顺便说一句,Docker容器可以正常运行/调试配置,因此它能够启动远程进程。

我已经能够使用pydevd启动调试服务器从容器到IDE的回调,并正常调试代码,所以我不知道哪里可能出错。

我认为短暂的容器没有暴露它的端口,所以我不知道集成开发环境期望如何连接到该容器上的进程。

谢谢你的帮助。

共有1个答案

司徒钱青
2023-03-14

我遇到了这个问题,问题似乎是我的docker容器和PyCharm自动生成的docker容器的克隆都缺少环境变量。

这里有一个特别的解决Django中这个问题的方法,首先打开:

偏好

默认Django控制台启动脚本:

import sys
print('Python %s on %s' % (sys.version, sys.platform))
print(sys.executable)
import django;
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

您需要在此处手动注入环境变量,否则解释器将无法读取POSTGRES_ENV_,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ["POSTGRES_ENV_DB_NAME"],
        'USER': os.environ["POSTGRES_ENV_POSTGRES_USER"],
        'PASSWORD': os.environ["POSTGRES_ENV_POSTGRES_PASSWORD"],
        'HOST': os.environ["POSTGRES_PORT_5432_TCP_ADDR"],
        'PORT': os.environ["POSTGRES_PORT_5432_TCP_PORT"],
    }
}

因此,只需运行:

docker exec -it CONTAINER_ID python -c 'import os; print(os.environ)'

并将输出复制到剪贴板中。最后,更新Django控制台启动脚本:

import os
os.environ = {"POSTGRES_ENV_DB_NAME":foo, "POSTGRES_ENV_POSTGRES_USER":bar}    

import sys
print('Python %s on %s' % (sys.version, sys.platform))
print(sys.executable)
import django;
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT) 

确保项目是根目录

 类似资料:
  • 我正在试用Rubymine(当前版本- 6.0.3)。我的客户机是Windows,我正在连接到一个远程linux主机,我的Ruby堆栈正在那里运行。我正在做一个存储在git repo中的项目,所以我已经在Windows客户端和项目运行的linux机器上克隆了这个repo。 < li >必须在本地签出文件似乎是一个缺点 感谢您提供的任何Rubymine提示。

  • 登陆慧编程帐号 使用帐号云广播可以实现电脑对光环板的远程控制功能。使用帐号云广播需要登陆慧编程帐号。 启用上传模式 点击启用上传模式。 连接网络 1. 添加事件类积木 当光环板启动时。使用帐号云广播需要连接网络。添加Wi-Fi类积木 开始连接无线网络()密码(),输入附近Wi-Fi的名称和密码。 2. 网络连接成功后,我们需要一个信号来告诉我们网络连接成功。添加控制类积木 等待(),拖入Wi-Fi

  • 我有一台Windows 8.1主机,配有Ubuntu 12.10LTS服务器,运行的是VirtualBox。 我设置了2个网络连接,第一个在NAT中,第二个是“仅限主机适配器”,它允许我在不更改IP地址等的情况下与VM保持恒定连接… 在我的主机上,我有RubyMine 6.3.3。我想做的是在Windows机器上开发(VM只是Ubunut服务器,所以没有桌面) 我将 GIT 中的所有文件保留在 V

  • 如果我使用以下配置,那么jackson转换器工作(mvc声明是最后) 如果我在dispatcher.xml中使用此配置,那么验证工作,但转换不工作。(mvc声明优先) 非常感谢您的任何帮助。Spring版本4.0.6

  • 我想允许一个域的跨源请求。我的项目使用Spring,所以我想利用新的CORS支持。 我遵循下面的示例https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread并尝试了第一个版本。我的控制器注释如下所示: 如果我理解正确的话,mvc-config是一种替代方法。我也试过了: 对于这两种方法,响应似乎

  • 问题内容: 像大多数Python开发人员一样,我通常会打开一个控制台窗口,并运行Python解释器来测试命令,东西等。 像任何控制台一样,一段时间后,过去的命令和打印的可见积压变得混乱不堪,有时会在多次重新运行同一命令时造成混乱。我想知道是否以及如何清除Python解释器控制台。 我听说过要进行系统调用并在Windows或上进行调用,但是我希望可以命令解释器自己执行一些操作。 注意:我在Windo