首页 > 解决方案 > 如何从函数内导入模块,但导入的模块在函数范围之外仍然存在?

问题描述

问题

出于可能令人费解的原因(见下文),我想做以下事情:

def import_np():
    import numpy
    return numpy.array([0])

def test_np():
    return numpy.array([1])

现在,如果我尝试调用这两种方法,第一种方法有效,但第二种方法无效:它说numpy is not defined. 我怎样才能解决这个问题?

背景

我想导入一个我们有很多版本的内部模块(编辑:澄清一下,我们为每个版本都分支)。理想情况下,我想参数化 import 语句,但我不能这样做,所以我想我可以有一个看起来像这样的函数:

def import_version(path_to_version):
    sys.path.append(path_to_version)
    import the_module

但是,我不能the_module在此方法之外使用,这导致了我上面的问题。

标签: pythonpython-import

解决方案


您可以将包版本的路径用作脚本的全局配置变量。然后您可以sys.path.append使用该全局变量进行函数调用,并且导入范围是您要在其中导入模块的整个脚本。

我建议您在模块加载失败时捕获异常。

import config
MODULE_PATH = config.path_to_version
sys.path.append(MODULE_PATH)
try:
   import the_module
except Exception as exp:
   // exception logging

这里有一个config.py包含模块版本路径的文件

path_to_version="your-path"

推荐阅读