【问题标题】:Script import errors while in another folder to main script在另一个文件夹中到主脚本时出现脚本导入错误
【发布时间】:2021-08-24 12:49:01
【问题描述】:

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

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

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

编辑:我意识到之前已经发布过类似的问题,但在我的情况下,重要的是要记住我无法编辑脚本 2 或 3

【问题讨论】:

    标签: python import directory


    【解决方案1】:

    这是一些模仿您描述的情况的代码:

    # 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

    【讨论】:

    • 是的,谢谢你。我正在为一家公司编写脚本,该公司为我提供了另外两个脚本作为我需要做的库。然而,其他不相关的脚本也依赖于这些库,因此更改它们会破坏我现在什至不知道存在的东西
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多