PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者。这本来是一个非常好的功能,但却由于另外一个问题,会给一些Python初学者造成困扰。
这一篇文章,我们讲讲工作区导致的这个问题。
首先我们创建一个login.py文件,它的内容如下:
def login(): print('登录服务器')
再创建一个 main.py
,它的内容如下:
from login import login print('准备登录服务器') login()
这两个文件的文件结构如下图所示:
此时,你在PyCharm中打开main.py,你就会发现红色的波浪线,如下图所示。
此时如果使用PyCharm来运行这个main.py文件:
你会发现PyCharm运行程序毫无问题:
所以PyCharm有问题?它胡乱报错吗?
实际上不是这样的。
Python有一个工作区的概念,在默认情况下,当你使用 python xxx.py
运行一个.py文件时,工作区就是你运行的这个.py文件所在的文件夹。由于login.py和main.py文件是放在同一个文件夹里面的,所以当你直接运行main.py时,Python能够正确知道 fromloginimportlogin
是指从和main.py在一起的这个login.py文件中导入login函数。所以一切都是正常的。
当时当你使用PyCharm打开一个项目文件夹时,由于还没有运行这个项目中的某个文件,所以PyCharm会以当前打开的这个项目文件夹为工作区。
在这个例子中,PyCharm会以 代码练习
这个文件夹作为工作区。所以当我在main.py中写 fromloginimportlogin
的时候,PyCharm会从 代码练习
这个文件夹里面去需找login.py文件。显然,由于login.py在chapter_1文件夹里面,不在 代码练习
这个文件夹里面,所以PyCharm找不到,于是就会画红色波浪线。
这种情况特别常见于初学者学习别人代码的情况。例如一个Python初学者,他会把所有的爬虫相关代码都放在名为 爬虫代码
的文件夹里面,然后他下载了我的一个知乎爬虫项目,这个项目的代码是在一个叫做 ZhihuSpider
文件夹里面的。此时,他把 ZhihuSpider
文件夹放在 爬虫代码
文件夹里面,再用PyCharm打开 爬虫代码
文件夹,那么他就会看到 ZhihuSpider
项目代码里面有大量的红色波浪线。这不是代码有问题,而是PyCharm自动识别的工作区不正确导致的。
要解决这个问题也非常简单。打开PyCharm的项目设置,定位到 ProjectStructure
,如下图所示。
点击红色箭头指向的x符号,删除当前的内容,并添加新的内容,如下图所示:
把真正的项目文件夹路径添加进去,如下图所示:
点击 OK
按钮,回到PyCharm,发现它已经可以正确找到 login.py
文件了。如下图所示,红色波浪线消失。
在下一篇文章中,我们会讲到由于虚拟环境不一致导致Python代码能运行,但是PyCharm画红色波浪线的情况。