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