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