在进行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搜索路径列表中。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐