不少读者在移植V1.0或者V2.0股票量化分析工具的时候,会碰到类似这样的报错:
ModuleNotFoundError: No module named 'MainlyGui'
这个报错是在import MainlyGui时引起的。
MainlyGui是我们的分析工具源代码中的一个文件,我们查看了下工程文件,发现这个文件明明就存在着,可是解释器就是找不到,到底是什么原因呢?
接下来我们就来讲下如何解决这类的问题。
关于绝对路径
比如以下的目录结构,我们在MainApp.py文件中去import我们自己编写的模块。
首先我们应该查看下在当前目录下的绝对路径是什么。
绝对路径是指从硬盘根目录(盘符)开始,一级级目录指向文件的路径。也就是文件真正存在的路径。
我们可以在MainApp.py中增加以下代码进行查看:
import os
path1=os.path.abspath('.') # 表示当前所处的文件夹的绝对路径
print(path1)
C:\Users\......\......\QTYX\MainlyGui
如果要查看当前所处的文件夹上一级文件夹的绝对路径,可增加以下代码进行查看:
import os
path2=os.path.abspath('..') # 表示当前所处的文件夹上一级文件夹的绝对路径
print(path2)
C:\Users\......\......\QTYX
关于相对路径
如果要在当前的程序中import其他模块,得让当前程序能够根据路径找到模块。
由于已经有了绝对路径,因此可以在这个基础上通过相对路径去找到这些模块。
相对路径指以当前文件为基准进行一级级目录指向被引用的文件。
../表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
案例说明
当主程序与模块程序在同一目录下,比如MainApp.py中导入MainFrame。
可以直接使用以下语句:
import MainFrame
或者
from MainFrame import *
主程序所在的目录是模块所在目录的父目录,比如MainApp.py中导入模块DefPanel(需要在ElementGui文件夹中建立文件__init__.py,当然可为空)。
可以直接使用以下语句:
import ElementGui.DefPanel
或者
from ElementGui.DefPanel import *
主程序导入上层目录中的模块或者其他目录(平级)下的模块 。比如MainApp.py中导入模块Baostock。
首先需要在ApiData下建立__init__.py文件,然后在sys.path环境变量添加Baostock模块路径。
我们前面说了导入模块关键是能够找到具体模块的路径。
如果去找到路径呢?可以增加sys.path环境变量的值去寻找:
import sys, os
sys.path.append(os.path.dirname(__file__) + os.sep + '../')
#sys.path.append("..")
#sys.path.append(r"C:/Users/....../QTYX/")
然后就可以直接以下语句:
import ApiData.Baostock
或者
from ApiData.Baostock import *
好了!以上就是针对小伙伴们遇到的常见问题的讲解,希望能够给大家带来帮助!
说明
近期加入知识星球可享福利【含续费用户】,微信call我获取!星球目录可点击【阅读原文】查看。
元宵大师的量化交易书籍开售!!京东、当当、天猫有售!!