python中的动态模块导入(代码从3.2到3.3)
我需要动态导入模块并创建类。python中的动态模块导入(代码从3.2到3.3),python,windows,python-3.x,python-import,python-module,Python,Windows,Python 3.x,Python Import,Python Module,我需要动态导入模块并创建类。 这是我在Python 3.2中的工作代码: klass = {} mod = __import__('sites.' + self.className + '_login', fromlist=[self.className]) klass[self.className] = getattr(mod, self.className) klass[self.className](**self.args) 该模块位于“站点”文件夹中。它称为my_site_login,
这是我在Python 3.2中的工作代码:
klass = {}
mod = __import__('sites.' + self.className + '_login', fromlist=[self.className])
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)
该模块位于“站点”文件夹中。它称为my_site_login,该模块中的类称为“my_site”
自从我升级到Python3.3后,代码就停止工作了。我读到importlib.import模块取代了导入。我尝试了几种方法,但都没能成功
这就是我所尝试的:我不记得我还试过什么。我能说的是,在任何导入尝试之后,我放置的print()都没有显示出来。我没有收到任何错误消息。它什么也不做 很抱歉这个问题,我知道它已经被回答了好几次,但是我尝试了所有的方法,但是没有任何效果。我再也不能思考了。
感谢advanced。您想重组此功能;在
站点
包\uuuu init\uuuuuuu.py
文件中,导入需要动态导入的所有模块
然后只需使用属性访问:
import sites
mod = getattr(sites, self.className + '_login')
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)
如果动态生成您的my\u site\u login.py
模块,则importlib.import\u模块()
可调用的功能非常简单:
importlib
mod = importlib.import_module('sites.{}_login'.format(self.className))
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)
在交互式命令提示符下,这可以正常工作:
>>> import importlib
>>> importlib.import_module('sites.my_site_login')
<module 'sites.my_site_login' from './sites/my_site_login.py'>
导入导入库
>>>importlib.import\u模块('sites.my\u site\u login')
在Python 2.7、3.2和3.3中进行了测试。Ok。。。这很尴尬。因为你的代码正是我想要的,所以有些地方不对劲。问题出在模块的新docstring中。没有utf-8声明,一些字符把一切都搞糟了。无论如何,我将使用您的第二个代码,正如您所猜测的,它们是动态生成的。谢谢
>>> import importlib
>>> importlib.import_module('sites.my_site_login')
<module 'sites.my_site_login' from './sites/my_site_login.py'>