参考了网友的各种方法,始终是无法将其他目录下的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.youkuaiyun.com/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