Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用monkey patch _init _;模块?_Python_Django_Init_Monkeypatching - Fatal编程技术网

如何在Python中使用monkey patch _init _;模块?

如何在Python中使用monkey patch _init _;模块?,python,django,init,monkeypatching,Python,Django,Init,Monkeypatching,我知道,我知道,这里很脏。我想知道是否有可能劫持Python模块的\uuuu init\uuu模块,用您自己的模块替换它 我这样问是因为我需要防止django lib启动它的init进程的某些部分,从而使它在配置中崩溃 是的,最好修复django库并发回补丁。是的,关于这件事我和作者联系过。但现在,我需要一个快速解决方案。您只需编辑\uuu init\uuuuuuuuy.py文件即可。没有什么能阻止你,如果你做得好,就不会发生什么坏事。劫持导入过程的一种方法是在导入之前的某个时间,在另一个模块中

我知道,我知道,这里很脏。我想知道是否有可能劫持Python模块的
\uuuu init\uuu
模块,用您自己的模块替换它

我这样问是因为我需要防止django lib启动它的init进程的某些部分,从而使它在配置中崩溃


是的,最好修复django库并发回补丁。是的,关于这件事我和作者联系过。但现在,我需要一个快速解决方案。

您只需编辑
\uuu init\uuuuuuuuy.py
文件即可。没有什么能阻止你,如果你做得好,就不会发生什么坏事。

劫持导入过程的一种方法是在导入之前的某个时间,在另一个模块中模拟导入,该模块在你想要修补的模块之前导入。在
sys.modules
中插入您想要的任何内容,并将模块的名称作为键,当需要导入原始模块时,Python将在
sys.modules
中找到一个条目并使用它。如果导入是以某种神奇的方式完成的,那么这可能不起作用


另一方面,您可以随时复制原始项目并根据自己的喜好对其进行修补。

根据自己的喜好编辑
\uuuu init\uuuuuuuuuuy.py
怎么样?这都是普通的短信,我正要发表评论,这应该是一个答案+1-1. 我知道我能做到。我做到了。我制作了一个补丁并与同事分享。但问题不是“你能用这个应用解决我的问题吗?”。我的问题是:你能劫持init吗?仅仅因为你能破解一些东西,总有一天会导致无法维护的代码+1崩溃,但我没能做到。我看不出如何正确地更换它。如果我在模块dict中设置了条目,那么我就无法导入ohter子模块,因为我的版本不在同一目录中。对,我想您可能在导入子模块时遇到问题。实际上,您也可以尝试手动导入这些子模块,但我不确定最好的方法。您可以尝试的最后一件事是临时对有问题的模块使用的任何外部函数/全局函数/等进行修补。毕竟,如果模块正在做一些涉及副作用的事情,那么它可能正在调用一些外部函数或修改全局函数。在导入之前进行修补,然后立即重置monkey修补程序,您应该会没事的。