用pyximport重新加载模块?

用pyximport重新加载模块?,第1张

用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!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存