栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用pyximport重新加载模块?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用pyximport重新加载模块?

与Python 3.x相比,我能够获得一个适用于Python
2.xa的解决方案。无论出于何种原因,Cython似乎都在缓存

.so
从中导入模块的可共享对象()文件,即使在运行时重建并删除了旧文件之后,它仍会从旧的可共享对象文件中导入。但是,无论如何这都是没有必要的(当您
importfoo.bar
创建时,它不会创建一个),因此我们还是可以跳过这一步。

最大的问题是,即使在

reload
ing之后,python仍保留对旧模块的引用。普通的python模块似乎可以找到,但是与cython无关。为了解决这个问题,我运行了两个语句来代替
reload(foo.bar)

del sys.modules['foo.bar']import foo.bar

这样可以成功(尽管可能效率较低)重新加载cython模块。运行该子流程的Python
3.x中唯一存在的问题是创建有问题的可共享对象。取而代之的是一起跳过所有内容,让它

importfoo.bar
pyximporter
模块一起发挥作用,然后为您重新编译。我还向
pyxinstall
命令添加了一个选项,以指定语言级别以匹配您在
setup.py

pyximport.install(reload_support=True, language_level=3)

所以一起:

运行器

import sysimport pyximportpyximport.install(reload_support=True, language_level=3)import foo.barif __name__ == '__main__':    def reload_bar():        del sys.modules['foo.bar']        import foo.bar    foo.bar.say_hello()    input("  press enter to proceed  ")    reload_bar()    foo.bar.say_hello()

其他两个文件保持不变

运行:

Hello!  press enter to proceed

-replace

"Hello!"
富/ bar.pyx
"Hello world!"
,并按
Enter

Hello world!


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号