解决PyCharm同目录下导入模块会报错的问题

  • Post category:Python

解决PyCharm同目录下导入模块会报错的问题

在PyCharm开发过程中,同一目录下的模块导入会出现一些意外的错误,例如“ModuleNotFoundError: No module named ‘xxx’”。一般来说主要是因为PyCharm的运行环境没有找到相关的模块路径。下面提供几种解决方法:

方法1:将当前目录添加到系统路径

可以将当前目录添加到Python运行环境的系统路径中,达到使用本地目录下的模块的目的。在Python项目中可以用以下代码实现:

import os,sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))

在使用PyCharm时,也可以在py文件所在目录,在PyCharm菜单栏的“Run”->“Edit Configurations”->“Environment variables”中加入“PYTHONPATH”或选择“Add content root to PYTHONPATH”,指定项目所在的绝对路径地址即可。

示例1:

假设我有如下目录结构:

├── my_project
│   ├── main.py
│   └── my_module.py

在main.py中,调用my_module中的函数:

from my_module import my_function
my_function()

执行会提示’ModuleNotFoundError: No module named ‘my_module”,因为Python环境无法找到my_module.py。可以在main.py中添加如下代码:

import os,sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from my_module import my_function
my_function()

方法2:使用模块相对路径

在相对引用中使用包的相对路径,取决于py文件的当前位置和导入相对路径。可以指定父级目录来实现相对路径的查找。

示例2:

假设我有如下目录结构:

├── my_project
│   ├── main.py
│   └── my_package
│       ├── __init__.py
│       └── my_module.py

在main.py中,调用my_module.py中的函数:

from my_package.my_module import my_function
my_function()

从my_package包中导入my_module,相对路径应该是’.’:

from .my_module import my_function
my_function()

而不能直接使用’import my_module’,这样在PyCharm中会提示“unresolved reference ‘my_module’”。

总结

本篇攻略提供了两种解决方法,分别是将当前目录添加到系统路径和使用模块相对路径。前者适用于不同平台和不同场景,但是比较依赖于系统环境;后者则不需要改变系统环境变量,但是要求开发者对于包结构有一定的理解。如果你的项目比较大,可以考虑使用包的形式,这样可以更好的组织代码。