在另一个文件夹中的脚本导入错误到主脚本

Script import errors while in another folder to main script

我有一个脚本(脚本 1)导入另一个脚本(脚本 2),该脚本位于与脚本 1 相同目录的文件夹中。这很好,因为我添加了 import [folder].[script 2] 然而,脚本 2 导入了另一个脚本(脚本 3),它与脚本 2 在同一文件夹中,但是当我 运行 脚本 1 脚本 2 找不到脚本 3.

我希望你能理解这个哈哈,我要提一下,脚本 2 或脚本 3 都不能编辑,因为它是程序实施时将使用的实际脚本的副本。

有什么方法可以告诉脚本 2 在该文件夹中查找吗?

编辑:我发现之前有人发布过类似的问题,但就我而言,重要的是要记住我无法编辑脚本 2 或 3

下面是一些模拟您描述的情况的代码:

# subfolder/script3.py
def f3():
    print("Hello")
# subfolder/script2.py
from script3 import f3
def f2():
    f3()
# script1_v1.py
from script2 import f2
f2()
## -> ModuleNotFoundError: No module named 'script2'

# script1_v2.py
from subfolder.script2 import f2
f2()
## -> ModuleNotFoundError: No module named 'script3'

最简单的解决方案是将脚本的路径添加到 sys.path:

# script1_v3.py
import sys
sys.path.append("subfolder")

from sc2 import f2
f2()

这个解决方案并不是很干净,因为根据脚本的名称,它可能会干扰 python 标准库,例如如果它们被称为 sys.pyos.py.

存在其他解决方案,但您需要提供更多信息,例如脚本 2 和 3 的来源以及为什么不能修改它们。

编辑:

为了完整起见,还有另一种解决方案可能适合您并且更简洁,但需要稍微修改 script2.py:

# subfolder/script2.py
from .script3 import f3
def f2():
    f3()

注意导入行中的点。它不应该影响其他模块之间的交互(除非他们做了一些可疑的事情)并且带有 subfolder.script2 的版本现在应该可以正常工作而无需修改 sys.path.