我如何在 Python 更高层级中传递导入?

How can i pass imports in Python higher up the hierarchy?

我正在开发一个 运行 在两个不同平台上运行的程序。根据我想要 运行 它的平台,导入目录和库的名称会发生​​变化。出于这个原因,我将一个名为 RUN_ON_PC 的变量设置为 True 或 False。

我想实现一个助手,它可以正确设置路径并根据平台导入具有正确名称的库,并为主程序提供一个与库同名的接口。模块 myimporthelper 位于“/mylib”或“/sd/mylib”目录中。这些目录中的其他模块名称不同。

我尝试执行以下不起作用的操作,因为从 myimporthelper.py 导入的模块对 main.py 不可见:

main.py:

RUN_ON_PC = True
import sys
if RUN_ON_PC:
    sys.path.append("/mylib1")
else:
    sys.path.append("/sd/mylib1")
import myimporthelper
myimporthelper.importall(RUN_ON_PC)

a = moduleA.ClassA()       -> produces NameError: name not defined

myimporthelper.py:

import sys
def importall(run_on_pc):
    if (run_on_pc == True):
        sys.path.append("C:\Users\.....\mylib")
        import module1 as moduleA
    else:
        sys.path.append("/sd/mylib")
        import module_a as moduleA

我想保持 main.py 简短,并希望将依赖于平台的导入内容外包给其他模块。我无法为此找到解决方案,希望得到任何帮助。

非常感谢。

你只需要用辅助模块名称限定名称

a = myimporthelper.moduleA.ClassA()

但是 moduleA 名称必须可以访问。如果您将它导入到辅助函数中的函数中,由于作用域的原因,它不会被导入,除非您将它分配给您之前在辅助模块函数中声明为 global 的名称。