2009-08-25 4 views
1

私はいくつか頻繁に変更されたpythonファイルをインポートするpythonファイルを持っています。インポートしたファイルを変更したときに再コンパイルしないと、問題が発生しました。コンパイルを中止するにはどうしたらいいですか?Pythonインポートのコンパイルを防止する

+1

これらは再コンパイルする必要があります。なぜなら、最初にどうやっていないのかを調べるためです。 –

+0

うん、まさに。権限エラー?例えば。ソース.pyが読み込み専用の場合、結果の.ycycバイトコードは読み込み専用であるため、上書きすることは難しくなります。 – ewall

+1

それらは**再コンパイルされておらず、**停止したい**それらは再コンパイルからですか?それはほとんど意味がありません。彼らは再コンパイルしていません - あなたは何を "停止"していますか? –

答えて

2

私はそれが可能だとは思いません - それはPythonの仕組みです。あなたができる最善の方法は、最初に*.pycファイルを削除する何らかの自動スクリプトを用意することです。あるいは、すべてのインポートを自動的にコンパイルする開発モジュールを用意することもできます。compileモジュールを試してみてください。

私は個人的にはこのようなトラブルを経験していませんが、ファイルのタイムスタンプをチェックしてみてください。ディレクトリ内のすべてのPythonファイルに対してtouchを実行してみることができます。 (find -name \\*.py -exec touch \\{\\} \\;

+1

force = Trueを指定したcompileall.compile_dirは、このトリックを実行する必要があります。 – jonatron

1

あなたを助けるかもしれないいくつかのモジュールがあります。

はpy_compileモジュール(http://effbot.org/librarybook/py-compile.htm)は(「インポート」ステートメントがないようにそれらを実行せずに)明示的にモジュールをコンパイルすることができます。

import py_compile 
py_compile.compile("my_module.py") 

また、compileallモジュール(http://effbot.org/librarybook/compileall.htm)がディレクトリにあるすべてのモジュールをコンパイルします。

import compileall 
compileall.compile_dir(".", force=1) 
0

あなたはcompileall

compileall.compile_dirを探しています(DIR [、 maxlevels [、DDIR [、[RX、[強制、 静かな]]]]])

dirという名前のディレクトリツリーを再帰的に降下させ、すべての.py ファイルをコンパイルします。

1

Python 2.6では、-Bオプションを指定することができます。

+0

環境内で 'set PYTHONDONTWRITEBYTECODE = 1'を実行してください。 – JimB

+0

または "Py_DontWriteBytecodeFlag = 1;"インタプリタを埋め込む場合は、ソースコードに記述します。これはpydebug.hで宣言されたグローバルなintです。 – JimB