目录如下所示:
-- test
-- -- a
-- -- -- b.py
-- -- c
-- -- -- d.py
任务:需要在d.py
中调用b.py
中名为hello
的类。
基本思路就是通过sys.path.append()
语句添加路径,以便检索对应的包,最后却被命令行的路径问题搞了心态。
重点在于命令行所处的状态。终端的显示正常是这样的:
PS C:\Users\lizex\Desktop\test>
而此时若我们直接点击右上角的绿色按钮,会执行下述命令:
PS C:\Users\lizex\Desktop\test> & D:/Python3/python.exe c:/Users/lizex/Desktop/test/b/d.py
此时运行下述代码,就会报错ModuleNotFoundError: No module named 'a'
:
import sys
sys.path.append('..')
print(sys.path)
"""
sys.path
['c:\\Users\\lizex\\Desktop\\test\\b', 'D:\\Python3\\python37.zip',
'D:\\Python3\\DLLs', 'D:\\Python3\\lib', 'D:\\Python3',
'D:\\Python3\\lib\\site-packages', '..']
"""
import a.c
分析可知,VScode的地址解析会将当前执行文件的路径加入sys路径,而鉴于是在C:\Users\lizex\Desktop\test
下添加了..
路径,实际上sys最后加入的路径是C:\Users\lizex\Desktop
,此时执行import a.c
就自然报错。
在分析清楚问题之后,解决就很容易,可通过将命令行地址改成C:\Users\lizex\Desktop\test\b
后执行sys.path.append('..')
来解决,也可不改变地址,直接sys.path.append('.')
来解决。