2011-02-02 1 views
5

私は知っている、私は知っている、それは汚いとすべてです。私は、__init__ Pythonモジュールのモジュールを乗っ取り、それをあなた自身で置き換えることが可能かどうかを知りたいと思います。Pythonで__init__モジュールをmonkeyにパッチする方法は?

私はdjangoのlibがinitプロセスの一部を開始するのを防ぐ必要があるので、私たちの設定でクラッシュするように要求しています。

はい、djangoのlibを修正してパッチを送り返す方が良いです。はい、私はそのことについて著者に連絡しています。しかし、今のところ、私は迅速な修正が必要です。

+4

「__init __。py」を好きなように編集するのはどうですか?それはすべて単なる平文です。 –

答えて

0

__init__.pyファイルを編集するだけで済みます。あなたを止めるものは何もありません。もしあなたがそれを正しく行うなら、何も悪いことは起こりません。

+0

私は答えが必要であるとコメントしていました。 +1 –

+0

疑わしいときは、それをハックしてください! – jathanism

+0

私はただ既存のものをバックアップして編集します。 – XORcist

4

インポート手順をハイジャックする1つの方法は、実行する前にインポートをシミュレートすることです。別のモジュールでは、monkey-patchにインポートする前にインポートします。 sys.modulesにモジュールの名前をキーとして挿入し、元のモジュールをインポートするときには、Pythonはsys.modulesというエントリを見つけ、そのまま使用します。インポートがいくつかの魔法の方法で行われている場合、これは機能しない可能性があります。

一方、元のプロジェクトをコピーして好きなだけ修正することができます。

+0

+1で終わるが、私はそれをやっていない。私はそれを正しく置き換える方法を見ることができません。モジュールdictのエントリを設定した場合、私のバージョンが同じディレクトリにないため、サブモジュールをインポートできません。 –

+0

そうですね、サブモジュールのインポートに問題があると思いました。あなたも手動でそれらのサブモジュールを試してみることができますが、私はそれを行うための最善の方法は不明です。あなたが試すかもしれない最後のものは、外部関数/グローバル/ etcを一時的に猿でパッチすることです。問題のモジュールが使用すること。結局のところ、モジュールが副作用を含む何かをしているのであれば、おそらくいくつかの外部関数を呼び出したり、グローバルを変更している可能性があります。インポートの直前にパッチを適用し、直後にサルパッチをリセットしてください。そうすればOKです。 –

関連する問題