如何在给定完整路径的情况下导入模块?

我怎样才能加载一个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
链接地址: http://www.djcxy.com/p/42305.html

上一篇: How to import a module given the full path?

下一篇: open() in Python does not create a file if it doesn't exist