与Python 3.x相比,我能够获得一个适用于Python
2.xa的解决方案。无论出于何种原因,Cython似乎都在缓存
.so从中导入模块的可共享对象()文件,即使在运行时重建并删除了旧文件之后,它仍会从旧的可共享对象文件中导入。但是,无论如何这都是没有必要的(当您
importfoo.bar创建时,它不会创建一个),因此我们还是可以跳过这一步。
最大的问题是,即使在
reloading之后,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!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)