如何从Python可用的目录中选择模块?

时间:2018-03-30 12:53:49

标签: python python-importlib

假设我有一个充满Python模块和包的目录(在Python路径之外)。

如果我想让所有这些都可用于当前的Python解释器,我可以sys.path.append(dir_name)

如何才能将此目录中的选定模块或包提供给Python并隐藏其余部分?

我考虑过创建一个单独的目录,其中包含所选模块的符号链接,但我不知道如何使它跨平台而且感觉不对。

我怀疑解决方案涉及importlib,但我希望得到更具体的指针。

2 个答案:

答案 0 :(得分:0)

在Linux系统上,我执行以下操作:

export PYTHONPATH=/full/path/to/packages/packagename:$PYTHONPATH

以上是做什么的:

  • python使用了一个全局系统变量。它允许它在需要时在模块或相关要求的路径中查找。

您可能需要使用程序包的bin/目录,如果不能完全正常工作,您也可以将其导出到PATH变量。

答案 1 :(得分:0)

我自己找到了一个解决方案(适用于Python 3.5及更高版本):

from importlib.machinery import PathFinder
from importlib.util import module_from_spec

def load_module_from_alternative_path(module_name, path):
    spec = PathFinder.find_spec(module_name, path)
    module = module_from_spec(spec)
    sys.modules[module_name] = module
    if spec.loader is not None:
        spec.loader.exec_module(module)

load_module_from_alternative_path("foo", ["path_containing_foo"])
import foo