协慌网

登录 贡献 社区

给定完整路径如何导入模块?

如何在完整路径下加载 Python 模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项。

答案

对于 Python 3.5 + 使用:

import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()

对于 Python 3.3 和 3.4 使用:

from importlib.machinery import SourceFileLoader

foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()

(虽然这在 Python 3.4 中已被弃用。)

Python 2 使用:

import imp

foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

编译的 Python 文件和 DLL 有相同的便利功能。

也可以看看。 http://bugs.python.org/issue21436

向 sys.path 添加路径(使用 imp)的优点是,当从单个包导入多个模块时,它简化了操作。例如:

import sys
# the mock-0.3.1 dir contains testcase.py, testutils.py & mock.py
sys.path.append('/foo/bar/mock-0.3.1')

from testcase import TestCase
from testutils import RunTests
from mock import Mock, sentinel, patch

您也可以执行类似这样的操作,并将配置文件所在的目录添加到 Python 加载路径中,然后执行常规导入,假设您事先知道文件的名称,在本例中为 “config”。

凌乱,但它的确有效。

configfile = '~/config.py'

import os
import sys

sys.path.append(os.path.dirname(os.path.expanduser(configfile)))

import config