在进行python代码开发,尤其是进行代码部署时,明明在IDE(如Pycharm)中运行正常的代码,到了生产环境使用python xxx.py方式运行时,就报各种各样的ImportError: No module named XXX,找不到各种自定义的代码文件,产生这个问题的原因是python的搜索路径导致的,具体原因请自行搜索。下面说一种解决方法:
示例代码结构如下:
utils.tools目录下有tools.py代码文件,demo.py文件在utils目录下,也就是在tools.py的上级目录 。现在需要在demo.py代码中从utils目录开始导入tools.py中的一个print_msg函数,代码如下:
import os
import sys
# 获取当前代码文件绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将需要导入模块代码文件相对于当前文件目录的绝对路径加入到sys.path中
sys.path.append(os.path.join(current_dir, ".."))
from utils.tools import tools
tools.print_msg("hello world")
解决上述问题主要有三步:
1、首先执行current_dir = os.path.dirname(os.path.abspath(__file__))获取当前demo.py代码文件的绝对路径
2、然后执行os.path.join(current_dir, "..")代码获取目录utils相对于demo.py的绝对路径,上面说了demo.py是在utils目录下的,所以utils就是demo.py的上一级目录,因为我这里from utils.tools import tools从utils开始导入的,所以计算的是utils相对于demo.py的绝对路径
3、将utils相对于demo.py的绝对路径os.path.join(current_dir, "..")加入到sys.path搜索路径列表中。