6

インポート時に .pyc ファイルに自動的にコンパイルされるかなり大きなモジュールを作成しました。

クラスメソッドなど、モジュールの機能をインタープリターでテストしたい場合は、パッケージのreload()関数を使用します。imp

.pyc問題は、ファイルではなくファイルをリロードすること.pyです。

たとえば、インタープリターで関数を試してみて、それが正しく機能していないことがわかり、.pyファイルに変更を加えます。ただし、インタープリターでモジュールをリロードすると、.pycファイルがリロードされるため、変更がインタープリターに反映されません。インタープリターを終了し、再度開始してimport、モジュールをロードする (そして.pycファイルからファイルを作成する.py) 必要があります。または、.pyc毎回ファイルを削除する必要があります。

もっと良い方法はありますか?たとえば、ファイルよりもファイルをreload()優先するには?.py.pyc

これは、ファイルをreload()ロードすることを示すインタープリター セッションからの例外です。.pyc

>>> reload(pdb)
<module 'pdb' from 'pdb.pyc'>

編集:ファイルを削除しても、リロードを使用するたび.pycに別の.pycファイルが作成されるため、リロードを使用する.pycたびにファイルを削除する必要があります。

>>> reload(pdb)
<module 'pdb' from 'pdb.py'>
>>> reload(pdb)
<module 'pdb' from 'pdb.pyc'>
4

3 に答える 3

3

はい。コマンドラインオプションを使用できるものは次の-Bとおりです。

python -B

またはPYTHONDONTWRITEBYTECODE環境オプションを使用します。

export PYTHONDONTWRITEBYTECODE=1

これらは、.pycファイルが最初に生成されないようにします。

于 2013-07-15T20:56:30.400 に答える
0

ipython を使用している場合は、プレフィックスを付けることでシェル コマンドを実行できます。!

だからあなたはできる

>>> !rm some_file.pyc
>>> reload(some_file)

または、現在のシェルでクイック関数を定義できます。

>>> import os
>>> def reload(module_name):
...     os.system('rm ' + module_name + '.pyc')
...     reload(module_name)
...

モジュールをリロードしたいときはいつでも呼び出すだけです。

于 2013-07-15T20:57:01.527 に答える