PyCharm 在运行 docker-compose 解释器的情况下报告 Python 导入“未解析的引用”

问题描述 投票:0回答:2

PyCharm 在运行 docker-compose 解释器时报告对 Python 导入的“未解析引用”。 请参阅所附图像未解决的参考文献,例如在

settings.py
中: unresolved references e.g. in settings.py

我已经阅读并尝试了一些同类问题,并在此门户上找到了解决方案答案,例如将 PyCharm IDE 中的文件夹标记为源根目录。我也经常使用 Repair IDE 功能来重建索引。没有什么。到目前为止没有任何帮助。

我在使用 PyCharm 时遇到了这个问题,因为我没有在 venv 中运行 Python 安装并将 PyCharm 解释器切换到它,而是使用 Docker Compose 环境。

我为此目的创建了一个 dockerfile 和一个

docker-compose.yml
文件。如果我使用终端命令“docker compose up”,容器环境就会运行,并且我的Python/Django应用程序也可以通过浏览器启动而不会出现错误。容器各自的日志也不会引起任何问题。所以问题似乎不在于我的 Docker 环境,而在于 PyCharm IDE 与 Docker 环境交互的方式。

这是我的 Dockerfile 代码:

FROM python:3.10.4-slim-bullseye

# Set environment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /cpp_base

# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# Copy project
COPY . .

这是我的

docker-compose.yml

version: "3.9"

services:
  web:
    build: .
    container_name: python_django
    command: python /cpp_base/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/cpp_base
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:14.5
    container_name: postgres_14.5
    restart: always
    ports:
      - "5432:5432"
    environment:
       POSTGRES_DB: cpp_base
       POSTGRES_USER: postgres
       POSTGRES_PASSWORD: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data

  pgadmin:
    container_name: pgadmin4_container
    image: dpage/pgadmin4
    restart: always
    volumes:
      - pgadmin_data:/var/lib/pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: root
    ports:
      - "5050:80"

  blackd:
    restart: always
    image: docker.io/pyfound/black
    command: blackd --bind-host 0.0.0.0 --bind-port 45484
    ports:
      - "45484:45484"

  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./portainer-data:/data
    ports:
      - "9000:9000"

volumes:
  postgres_data:
  pgadmin_data:

在我的 PyCharm IDE 中:

  • 连接到docker守护进程设置->构建、执行、部署

    Settings->构建、执行、部署,参见附图

  • 添加新口译员

    Interpreter Docker-Compose configuration image, see attached file

  • 选择新的解释器并查看所有需要的包都在那里:

    Interpreter Selection and Package list, see attached file

  • 配置运行/调试配置

    see attached configuration image

完成所有这些配置后,我可以使用绿色三角形播放按钮启动 Ide 内的 Docker 环境。该代码似乎也可以运行,因为我可以在浏览器中看到 Django 默认应用程序。我完全不知道为什么 IDE 会产生红色下划线。有趣的是,如果我不在 IDE 中选择任何解释器,我仍然可以运行该应用程序,并且不会收到任何未解决的消息。因此,只有当我将解释器设置为 Docker 撰写文件中的“web”服务时,IDE 才会开始抱怨。

我的软件版本:

  • PYCharm 2022.2.2
  • Windows 11、10.0.22000
  • Docker v2.12.0,在 WSL2 上运行
  • Python 3.10.4
  • Django 4.1
python docker docker-compose pycharm python-import
2个回答
4
投票

我找到了解决办法。 jetbrain 支持和 jetbrain YoutTrack 的 bug 工具帮助我解决了这个问题。我必须做两件事:

1。第一个解决方案部分

首先,支持人员在我的 PyCharm 日志中发现了一个与 PyCharm Docker 解释器有关的错误。 日志中的错误有以下输出:

Error response from daemon: invalid environment variable: =::=::\

要修复此错误,您可以执行与此错误报告中相同的操作: https://youtrack.jetbrains.com/issue/PY-24604/Unable-to-create-Docker-Compose-interpreter-InternalServerErrorException-invalid-environment-variable

因此,在 PyCharm 中设置远程 Docker 解释器时,请在环境设置中取消选中以下选项: 包括父环境变量

不幸的是,这很难找到,可能很多用户不会立即找到它,因此会遇到同样的错误。

2。第二个解决方案部分

其他平台上的用户可以向我提供有关当前 PyCharm 中的错误的提示并显示其解决方法。您可以在此处找到解决方法: https://youtrack.jetbrains.com/issue/PY-55617/Pycharm-doesnt-recognize-any-of-my-installed-packages-on-a-remote-host

我不能说提到的两个解决方案是否相互依赖。但是,在第 1 点中的解决方案之后,错误消息已在日志中消失,并且在第 2 点中的解决方法之后,代码中的所有包依赖项和模块也不再向我显示为“未解析的引用”。这就是我的解决方案。


0
投票

我也有同样的问题。

据我所知,Jetbrains 不支持 Docker 编排中的远程解释器。虽然这应该可行,但它在 2022.2 被打破了。

这是有关它的未决问题。

© www.soinside.com 2019 - 2024. All rights reserved.