1 路径问题
(1)项目结构与程序内容
其中,a.py中的内容为:
from b import f2
# a.py
def f1():
print("this is function f1 in a.py")
f2()
b.py中的内容为:
# b.py
def f2():
print("this is function f2 in b.py")
demo.py中的内容为:
# demo.py
from folder1.a import f2
f2()
print(__name__)
(2)路径问题
在终端运行a.py和demo.py
发现a.py能跑通,但demo.py会报错
(3)原因分析
当a.py作为驱动程序时,会将当前目录自动添加到搜索路径(可以查看python语言第12天笔记5 模块搜索路径),b和a在一个目录下,自然可以通过搜索路径找到。
当demo.py作为驱动程序时,相当于将a的代码复制到了demo.py中,但b.py并不与demo.py处于同一目录下,因此找不到b
修改a.py如下:
from folder1.b import f2
# a.py
def f1():
print("this is function f1 in a.py")
f2()
在终端中,demo.py可以成功运行
但a.py却不能
这是因为a.py作为驱动文件时,搜索路径中没有folder1。
假如a.py中调用了b中的函数,a除了有需要被调用的模块外,还有测试程序,如何才能保证a.py和demo.py都能运行?
(4)a和demo同时能运行
修改a.py如下:
import sys
sys.path.append('../')
from folder1.b import f2
# a.py
def f1():
print("this is function f1 in a.py")
f2()
加上之后,“from folder1.b import f2”的意义就变成了在 …/folder1/b.py中找f2(此时当前路径为folder1)。
输出如下:
此时都能运行。
2 总结
对于自己写的程序,如果需要被调用,需要在开头加上:
import sys
sys.path.append('../')