首页 > 解决方案 > 在python3中运行时从动态路径导入固定模块

问题描述

我四处搜索并没有找到解决这个特定 Python3 问题的方法。也许这是我正在使用的关键字,或者它可能只是一个特殊的用例。如果我的问题是后者,这是我的问题:

我正在开发一个 python (3) 脚本,它需要使用在用户主目录中本地编译的 python 模块。我没有任何像配置脚本那样花哨的东西来为用户配置此路径作为自动化过程。我想在运行时将 python 模块的路径作为命令行参数传递给脚本,然后动态加载该模块。例如,我会调用:

$ myscript.py --modpath /home/user/path/to/ModuleSource

然后在我解析命令行参数时在我的代码中调用类似以下内容:

import sys
sys.path.append(localModulePath)
import GlobalModuleName

问题是,在我的脚本使用模块方法的静态代码中,实际模块直到运行时才能解析,当模块的定义传递给我的脚本时。也就是说,如果我有如下 python 代码

GlobalModuleName.moduleFunc()

我收到“ NameError: name 'GlobalModuleName' is not defined ”的运行时错误。

如何在不产生错误的情况下使此配置正常工作?我确信将使用模块的动态定义的代码是正确的。提前感谢您的指点。

标签: pythondynamicimport

解决方案


这对我来说非常有用

module1.py 导入操作系统导入系统

def func1():
    print("Executed func1 of module1")

主文件

import sys

pathPassed=sys.argv[1]
sys.path.append(pathPassed)
import module1
module1.func1()

执行

 python main.py ThePathformodule1.py

Executed func1 of module1

你唯一需要注意的是import声明应该在sys.path.append


推荐阅读