【问题标题】:Python: How can i import a script from another folder that also locally imports other scripts with relative paths/local text files?Python:我如何从另一个文件夹中导入脚本,该文件夹也在本地导入具有相对路径/本地文本文件的其他脚本?
【发布时间】:2019-04-04 17:12:52
【问题描述】:

我得到了一个可以自行运行的 python 程序。这种结构使得有一个 .py 文件(我们称之为 app.py)从附近的文件夹中导入许多其他脚本并使用它们来做某事。这些其他模块具有本地 config.txt 文件,并且还导入其他本地模块。

我想在其他地方有我自己的脚本来导入这个“app.py”并从中调用一个函数。问题是:我想调用的这个函数取决于相对导入到 app.py 本身的其他模块,当我尝试将 app.py 导入我的脚本时,它告诉我我找不到该应用程序的相对导入。 py 有。

我已经做了很多挖掘工作(添加 __init.py__ 文件,使用 system.path.append / insert 东西我现在很熟悉),我发现当我尝试运行我的脚本它成为当前工作目录,并且从 app.py 导入的任何相关目录(由我的脚本导入)都找不到,因为它不存在。

我能做什么,我可以使用绝对路径导入所有内容,或者将每个包/文件夹添加到系统路径,但由于有超过 10 个包,我不想这样做。如果我移动 app.py 和它周围的模块,那也会有问题。

app.py 非常独立,可以放在任何地方。我将不胜感激任何建议以一种很好/优雅的方式解决这个问题。

TL;DR :我有一个脚本试图在另一个目录中导入另一个脚本,但它也导入具有相对路径的其他脚本。我尝试导入的脚本已导入,但无法导入它通常导入的其他脚本。

【问题讨论】:

    标签: python python-2.7 python-import


    【解决方案1】:

    一种变体是在PYTHONPATH 中指定app.py 所在的目录。

    假设您有以下文件:

    yourscript.py -> 可以在系统上的任何位置,

    import app
    app.dosomething()
    

    somepackage/app.py

    import somemod
    from subpack import innermod
    
    def dosomething():
        somemod.x()
        othermod.y()
    

    somepackage/somemod.py

    def x():
        print("XXX")
    

    somepackage/subpack/innermod.py

    def y():
        print("YYYY")
    

    现在如果你打电话给yourscript 喜欢:

    PYTHONPATH=<path_to_your_somepackage> python yourscript.py

    它将解析你的脚本中相对于PYTHONPATH 的依赖关系,somepackage 所在的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多