PyCharm 在运行 docker-compose 解释器时报告对 Python 导入的“未解析引用”。 请参阅所附图像未解决的参考文献,例如在
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守护进程设置->构建、执行、部署
添加新口译员
选择新的解释器并查看所有需要的包都在那里:
配置运行/调试配置
完成所有这些配置后,我可以使用绿色三角形播放按钮启动 Ide 内的 Docker 环境。该代码似乎也可以运行,因为我可以在浏览器中看到 Django 默认应用程序。我完全不知道为什么 IDE 会产生红色下划线。有趣的是,如果我不在 IDE 中选择任何解释器,我仍然可以运行该应用程序,并且不会收到任何未解决的消息。因此,只有当我将解释器设置为 Docker 撰写文件中的“web”服务时,IDE 才会开始抱怨。
我的软件版本:
我找到了解决办法。 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 点中的解决方法之后,代码中的所有包依赖项和模块也不再向我显示为“未解析的引用”。这就是我的解决方案。