如何将 Python 中的导入传递到层次结构的更高位置?



我正在开发一个在两个不同的平台上运行的程序。根据我要运行它的平台,导入目录和库的名称会发生变化。出于这个原因,我将一个名为 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的名称。

最新更新