在另一个文件夹中的脚本导入错误到主脚本
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.py
或 os.py
.
存在其他解决方案,但您需要提供更多信息,例如脚本 2 和 3 的来源以及为什么不能修改它们。
编辑:
为了完整起见,还有另一种解决方案可能适合您并且更简洁,但需要稍微修改 script2.py
:
# subfolder/script2.py
from .script3 import f3
def f2():
f3()
注意导入行中的点。它不应该影响其他模块之间的交互(除非他们做了一些可疑的事情)并且带有 subfolder.script2
的版本现在应该可以正常工作而无需修改 sys.path
.
我有一个脚本(脚本 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.py
或 os.py
.
存在其他解决方案,但您需要提供更多信息,例如脚本 2 和 3 的来源以及为什么不能修改它们。
编辑:
为了完整起见,还有另一种解决方案可能适合您并且更简洁,但需要稍微修改 script2.py
:
# subfolder/script2.py
from .script3 import f3
def f2():
f3()
注意导入行中的点。它不应该影响其他模块之间的交互(除非他们做了一些可疑的事情)并且带有 subfolder.script2
的版本现在应该可以正常工作而无需修改 sys.path
.