如何导入导入本地模块的远程模块?

How do I import a remote module, that imports a local module?

我的程序使用 importlib.
从不同的位置导入模块这个导入的模块(我们称之为 A)导入了一些其他的模块位于它旁边的自定义模块(我们称之为 B)。

My_Project\
    │
    └─── my_program.py

Some_Other_Location\
    │
    ├─── A_module_my_program_wants_to_import.py
    └─── B_module_A_imports.py

当我导入 A 而没有 它导入 B 时,它工作得很好:

# Sample from my_program.py

path = Some_Other_Location\A_module_my_program_wants_to_import.py
spec = importlib.util.spec_from_file_location("A", path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

但是,在 A 中,我导入 B:

# Sample from A_module_my_program_wants_to_import.py

import B_module_A_imports

from B_module_A_imports import foo

而我 运行 我的程序,我得到:

Build error: No module named 'B_module_A_imports'
And a traceback to where I import in my program, and A

我试过指定 submodule_search_locations=Some_Other_Locationspec_from_file_location,但没用。

所以问题是如何导入远程模块,导入本地模块?

我找到了解决方法,但不是合适的解决方案。解决方法如下:

我已经意识到它正在尝试加载 B ,其中 my_program 位于但显然没有找到任何东西。但是,可以通过将 Some_Other_Location 添加到 sys.path 来欺骗加载程序找到文件。所以这就是 my_program 的导入部分的样子:

directory = Some_Other_Location
sys.path.append(directory)

path = Some_Other_Location\A_module_my_program_wants_to_import.py
spec = importlib.util.spec_from_file_location("A", path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

sys.path.remove(directory)

这很好用,但是,我仍然愿意接受实际的解决方案!