我有一个项目结构如下:
parent/ sub1/ __init__.py directoryManager.py sub2 tst.py
在www.example.com中tst.py,我试图从sub1中导入directoryManager作为ld,是否可以在不使用sys.path.append的情况下导入它?非常感谢
iszxjhcz1#
您可以用途:
from .. import directoryManager
额外的.向上一个字典如果这是要安装到路径from parent parent.sub1 import directoryManager的软件包
.
from parent parent.sub1 import directoryManager
unhi4e5o2#
import os import sys sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from sub1 import directoryManager
这应该行得通。
1aaf6o9v3#
import importlib.machinery import importlib.util import sys from pathlib import Path finder = importlib.machinery.PathFinder() spec = finder.find_spec( 'directoryManager', [str(Path(__file__).resolve().parent.parent / 'sub1')] ) # or finder.find_spec('directoryManager', ['../sub1']) if cwd is sub2 module = importlib.util.module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module)
这个配方不需要文件的完整路径。因此它对于导入扩展名很有用(它们有像.cpython-38-aarch64-linux-gnu.so这样的后缀)。
.cpython-38-aarch64-linux-gnu.so
import importlib.util import sys from pathlib import Path spec = finder.spec_from_file_location( 'directoryManager', str(Path(__file__).resolve().parent.parent / 'sub1' / 'directoryManager.py') ) # or finder.spec_from_file_location('directoryManager, '../sub1/directoryManager.py') if cwd is sub2 module = importlib.util.module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module)
这个食谱更简单明了。改编自https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
https://docs.python.org/3/library/importlib.html#checking-if-a-module-can-be-imported (importlib.util.find_spec内部使用PathFinder.find_spec)
importlib.util.find_spec
PathFinder.find_spec
3条答案
按热度按时间iszxjhcz1#
您可以用途:
额外的
.
向上一个字典如果这是要安装到路径
from parent parent.sub1 import directoryManager
的软件包unhi4e5o2#
这应该行得通。
1aaf6o9v3#
配方1
这个配方不需要文件的完整路径。因此它对于导入扩展名很有用(它们有像
.cpython-38-aarch64-linux-gnu.so
这样的后缀)。配方二
这个食谱更简单明了。改编自https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
参考
https://docs.python.org/3/library/importlib.html#checking-if-a-module-can-be-imported (
importlib.util.find_spec
内部使用PathFinder.find_spec
)