python - 动态导入模块作为全局变量
问题描述
我正在尝试动态导入模块并将其作为全局变量。
我正在使用 maya 2020 python 解释器(Python 2.7)
我在“/home/arda.kutlu/Downloads/”文件夹下有一个名为“trigger_test_script.py”的测试模块。
当我不导入任何自定义类并运行它时:
###########################################################################[START]
import sys
import imp
class TestClass(object):
def __init__(self):
self.filePath = None
self.asName = None
def action(self):
exec("global %s" % self.asName, globals())
foo = "imp.load_source('%s', '/home/arda.kutlu/Downloads/trigger_test_script.py')" %self.asName
cmd = "{0}={1}".format(self.asName, foo)
exec(cmd, globals())
###########################################################################[END]
test = TestClass()
test.filePath = "/home/arda.kutlu/Downloads/trigger_test_script.py"
test.asName = "supposed_to_be_global"
test.action()
print(supposed_to_be_global)
我得到了我想要的确切结果:
<module 'trigger_test_script' from '/home/arda.kutlu/Downloads/trigger_test_script.pyc'>
但是,当我将 TestClass (哈希之间的部分)保存到文件中并像这样导入它时:
import testClass
test = testClass.TestClass()
test.filePath = "/home/arda.kutlu/Downloads/trigger_test_script.py"
test.asName = "supposed_to_be_global"
test.action()
print(supposed_to_be_global)
'supposed_to_be_global' 的变量没有变成全局变量,我得到了 NameError。
我一直认为这两种用法应该返回相同的结果,但显然我遗漏了一些东西。
我感谢任何帮助,谢谢。
解决方案
我不太明白您关于使用不同action()
方法的多个模块的最后评论是一个问题。所以忽略这一点,这里是如何使您的问题中的内容起作用,哈希中的部分将在内联或放入单独的模块中并导入时起作用。
###########################################################################[START]
import imp
class TestClass(object):
def __init__(self):
self.filePath = None
self.asName = None
def action(self):
foo = imp.load_source(self.asName, self.filePath)
return foo
###########################################################################[END]
#from testclass import TestClass
test = TestClass()
test.filePath = "/home/arda.kutlu/Downloads/trigger_test_script.py"
test.asName = "supposed_to_be_global"
supposed_to_be_global = test.action()
print(supposed_to_be_global)
推荐阅读
- python - Discord.py 获取没有机器人的服务器成员
- r - R 中的 Vemco 声学遥测数据(vrl 文件)
- excel - 将 Workbook_1 中的值记录到 Workbook_2
- typescript - 如何使打字稿在失败的非空断言上抛出运行时错误?
- r - 在某些条件下转换向量中的矩阵值
- jquery - toggleClass 单击或更改子输入
- html - 开发 FlexdashBoard 应用程序时如何在 renderUI 中结合数据表和 HTML。?
- java - 带有本地数据库中用户的带有弹簧启动的 Azure AD
- javascript - 为开发人员工具调试器的新手使用调试器的更好方法?
- windows - 窗口不可见,但 IsWindow + IsWindowVisible + IsWindowEnabled 返回 true 并且 GetWindowRect 返回合理的值