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

新手上路,请多包涵

如何在给定完整路径的情况下加载 Python 模块?

请注意,该文件可以位于文件系统中的任何位置。

原文由 derfred 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

对于 Python 3.5+ 使用( 文档):

 import importlib.util
import sys
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
sys.modules["module.name"] = foo
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

原文由 Sebastian Rittau 发布,翻译遵循 CC BY-SA 4.0 许可协议

向 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

原文由 Daryl Spitzer 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题