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

时间:2014-12-09 14:26:00

标签: python python-3.x

如何根据Python的完整路径在Python 3.4中加载Python模块?

类似的问题How to import a module given the full path?涵盖了3.4之前的Python版本,但结论是Python 3.4中的支持不适用于所提出的答案,因此感谢Python 3.4的任何解决方案。

请注意,此问题与Import abitrary python source file. (Python 3.3+)不重复,因为此问题的答案也使用了{3.4}中弃用的loader.load_module(),如answer中所述,详情请参阅Consider leaving importlib.abc.Loader.load_module() 3}}和importlib中的文档。

因此需要在Python 3.4中通过完整路径导入模块的支持解决方案。

4 个答案:

答案 0 :(得分:16)

这适用于所有python文件,无论文件扩展名如何:

import importlib.machinery

modulename = importlib.machinery.SourceFileLoader('modulename','/Path/To/module.py').load_module()

imp.load_module documentation中的弃用邮件中提到了此方法。

答案 1 :(得分:5)

已经给出的答案有效,但不必要地笨拙。一种更简单的方法:

import sys, os, importlib

sys.path.append(os.path.dirname(filename))
mname = os.path.splitext(os.path.basename(filename))[0]
imported = importlib.import_module(mname)                       
sys.path.pop()

imported是导入的模块;您可以通过imported.method(arg)正常使用它。最后一行并不是绝对必要的,但是不要在sys.path中留下不必要的条目更清楚(特别是如果你要多次运行代码)。这适用于3.4,并且不使用标记为已弃用的任何内容。

答案 2 :(得分:5)

根据3.6 docs支持和不弃用的方法是这样的:

def import_file(full_name, path):
    """Import a python module from a path. 3.4+ only.

    Does not call sys.modules[full_name] = path
    """
    from importlib import util

    spec = util.spec_from_file_location(full_name, path)
    mod = util.module_from_spec(spec)

    spec.loader.exec_module(mod)
    return mod

答案 3 :(得分:1)

下面的函数在Python 3.4中有效 - 它用于在模块中加载和运行特定的函数,但是你需要将文件夹添加到sys路径。

sys.path.append("path_to_your_file_to_import")
tool = {'file':'test_tool.py', 
    'function':'sum_even_numbers', 
    'args':['list'], 
    'return':['int']
}

args = [1,2,3]

def run(tool, args, silent='Y'):
        if silent == 'N':
            print('main called ' + tool['file'] + '->' + tool['function'] + ' with ', args, ' = ', tool['return'])
        mod = __import__( os.path.basename(tool['file']).split('.')[0])
        func = getattr(mod, tool['function'])
        tool['return'] = func(args)
        return tool['return']

通过

进行调用
run(tool, args)