18

ときどき、デバッグが非常に難しい問題に遭遇します。$PYTHONPATH のどこかに .pyc ファイルが残っていて、一致する .py ファイルが $PYTHONPATH 内の別の場所に移動されているため、試してみるとモジュールをインポートするには、「孤立した」.pyc ファイルが使用され、「実際の」.py ファイルへのすべての変更が無視されるため、何が起こっているのかがわかるまで非常に混乱します。

Python で「孤立した」.pyc ファイルを使用しないようにする方法や、使用時に警告を出力する方法はありますか?
あるいは、私がこの問題を抱えているという事実は、私が何か間違ったことをしていることを意味しますか?

4

2 に答える 2

6

パスに.pycファイルが見つかった場合、Pythonが.pycファイルをロードするのを防ぐことはできません。

いくつかのオプションがあります。

  1. 問題のあるモジュールをインポートし、そのパスが何であるかを把握します。

    >>> import borkenmod
    >>> import sys
    >>> sys.modules[borkenmod.__name__].__file__
    'lib/python2.7/borkenmod.pyc'
    
  2. スクリプトを使用してPYTHONPATHをウォークし、古いバイトコードファイルを削除します。リンクされたスクリプトは、対応するファイルが存在しないすべての ファイルを削除します。.pyc.py

  3. PYTHONPATH内のすべての.pycファイルをワイプし、Pythonにcompileallモジュールを使用してそれらを再生成させます。

    python -m compileall [path]
    

    次に、その1つのファイルを削除します。

最後の2つのオプションにより、正規のPythonモジュールが削除される可能性があることに注意してください。一部のPythonモジュール(特に商用ライセンス)は、コンパイルされたバイトコードとしてのみ配布されます。

于 2012-05-28T19:22:55.017 に答える
6

これを試してください(ここを参照):

PYTHONDONTWRITEBYTECODE

これが設定されている場合、Python はソース モジュールのインポート時に書き込み.pycやファイルを試行しません。.pyoこれは、-Bオプションを指定することと同じです。

バージョン 2.6 の新機能。

ただし、これに関連する問題が 1 つあり.pycます。ファイルを使用する利点が失われます (したがって、パフォーマンスが低下します)。より良い、クリーンで使いやすい方法は、ディレクトリを調べて、.pyc必要のない孤立したファイルを消去することです。スクリプトでそれを行う必要があり、.pycファイルに関連付けられることを意図していないファイルがないことを確認してください.py(たとえば、ある程度の難読化のため)。

于 2012-05-28T18:53:52.767 に答える