【Python】PyCharm 中的 import 问题

Posted by 西维蜀黍 on 2019-10-27, Last Modified on 2021-09-21

Problem

已经在 Terminal 下执行:

$ pip install django-redis

在项目中引用from django_redis import get_redis_connection

但是在 PyCharm 中运行 Django,提示依赖包未安装错误:

ImportError: No module named redis_cache

但是,在 Termical 下执行:

$ python manage.py runserver

可以正常运行 Django。

Analysis

由于在默认情况下,通过 PyCharm 创建的项目会使用virtualenv来管理项目中使用到的依赖包。因此,如果直接在 Terminal 下执行:

$ pip install django-redis
Requirement already satisfied: django-redis in /Library/Python/2.7/site-packages (4.10.0)
Requirement already satisfied: redis>=2.10.0 in /Library/Python/2.7/site-packages (from django-redis) (3.3.11)
Requirement already satisfied: Django>=1.11 in /Library/Python/2.7/site-packages (from django-redis) (1.11.24)
Requirement already satisfied: pytz in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from Django>=1.11->django-redis) (2013.7)

其实会将django-redis安装到系统全局的 site-packages的文件夹下。

而通过:

$ pip list
Package      Version
------------ -------
Django       1.11.25
pip          19.2.3
PyMySQL      0.9.3
pytz         2019.2
setuptools   41.2.0
wheel        0.33.6

我们发现在这个项目的 venv环境中并没有安装django-redis,这也解释了为什么直接在 Termical 下运行这个 Django没有依赖包找不到的问题,而通过 PyCharm 就有。

Solution

进到项目对应的文件夹下,执行:

$ source venv/bin/activate

在 venv 下安装这个依赖库:

$ pip install django-redis

此时,就可以在 PyCharm 下运行你的工程了。