如何导入导入本地模块的远程模块?
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_Location
或 spec_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)
这很好用,但是,我仍然愿意接受实际的解决方案!
我的程序使用 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_Location
或 spec_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)
这很好用,但是,我仍然愿意接受实际的解决方案!