no module namedXXX,python从其他目录下 import 一直报错(dll、py...)

参考了网友的各种方法,始终是无法将其他目录下的dll导出来,一直提示no module named xxx。
最终觉得问题还是出在路径上,通过绝对路径导包也还是出问题。。。最终我决定在__init__.py文件中提前将临时目录加入到sys.path内,再import

环境

python3.6
vscode

目录结构

我的目录结构大概是这样的,我的test1.py需要:
1、导入同级目录下的moduleA.py
2、导入config内的need.dll文件
在这里插入图片描述

解决方法

1、检查需要导入的包(config)文件下是否有__init__.py文件
2、检查是否将需要导入模块的路径加入到系统路径中,可以用以下命令检查

import sys
print(sys.path)

因为一直是以下的写法报错,一直提示config内没有need模块

#test1.py
from config import need

所以,我决定,在__init__.py文件内将config的路径加入到系统路径中。因为导包时,会先执行__init__.py文件,再进行其他的导入。所以可以改为以下形式

#__init__.py
import os
import sys
cur_path = os.path.abspath(__file__)
parent_path = os.path.abspath(os.path.dirname(cur_path) + os.path.sep + ".")
sys.path.append(parent_path)

test1.py内的调用改写为:

import config
import need

如果直接在test1.py中先写入sys.path.append(…)再import need
则依旧会报错,这是因为需要确保config的路径先加入到系统中了,再执行
import need 才可以。[当然了,有的网友就是这样直接写解决了他们的问题,但是直接在test1.py中写入我的是一直没办法的解决的,所以大家尝试了别的方法不行的话,可以试试我这种~]

其他问题

至于关于路径的问题、还有原理、其他的问题,有位网友已经进行了总结,在这儿就不过多赘述了,有其他问题的小伙伴可以直接参考:

https://blog.csdn.net/edward_zcl/article/details/88803461?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

猜你喜欢

转载自blog.csdn.net/Iv_zzy/article/details/107493507