Pythonのpycファイル
Pythonファイル*.pyを実行すると、対応する*.pycファイルが生成されます。これはpythonインタプリタが*.pyファイルからコンパイルしたバイナリファイルで、機能的な違いはなく、*.pyファイルと全く同じように動作します。
多くのベンダーは、ソースコードの流出を防ぐために、*.pyのソースファイルをコンパイルして削除し、すべて*.pycファイルで製品を動作させるという手段に出ることが多いようです。もちろん、自分を壊すものと対になって*.pycファイルを開くわけですから、ソースコード対策としては十分な役割を果たしています。
しかし、ここでキッカケがあります。python *.pycを他のマシン(つまりpyファイルをコンパイルしないマシン)で実行すると、エラーが報告されることがあります。
RuntimeError: Bad magic number in .pyc file
マジックナンバー はUNIX系システムではファイルの最初の数バイトで、ファイルの種類を表します。pythonはpycファイルを生成するためにコンパイルするときに、同様のマークを付けます。Python インタープリタが pyc ファイルを読み込むとき、まずファイルのマジックナンバーが正しいかどうかを確認する必要があります。
マジックナンバーが破損している pyc ファイルは、pyc ファイルの編集や、pyc ファイルを実行するために異なるバージョンの Python インタープリタを使用することも含めて、上記のエラーを発生させますが、通常は Python インタープリタのバージョンによってエラーが発生することが多いようです。
これらのpycファイルが自分のものである場合、UNIX系システムで使用します。
rm *.pyc
または
find . -name '*.pyc' -delete
上記2つのコマンドは、すべてのpycファイルを削除し、現在のPythonインタプリタでpyファイルを再コンパイルして、対応するpycファイルを取得します。
しかし、これらのpycファイルへの軽いアクセスがない場合、対応するバージョンのPythonインタプリタをインストールして実行するのがベストです。
Python2もPython3も現在とても人気があり、その間のpycファイルでこのエラーが出る可能性がとても高いので、注意していただければと思います!
また、カレントディレクトリにあるすべてのpyファイルをコンパイルするコード、comprie.pyも添付します。
#! /usr/bin/env python
# encoding=utf-8
import compileall
def compile_run():
'''
Pre-compile the py file in the current directory into a pyc file
: return:
'''
compileall.compile_dir(r'. /')
if __name__ == '__main__':
compile_run()
ここで、compileall は、カレントディレクトリにあるすべての py ファイルを pyc ファイルにコンパイルするために python compile.py を実行するサードパーティモジュールです。
関連
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】 python : 整数が必要です (str型を取得)
-
[解決済み】Pythonのmapオブジェクトはsubscriptableではない
-
[解決済み】range使用時の「TypeError: 'float' object cannot be interpreted as integer」の意味とは?
-
リストのインデックスを取得する際にエラーが発生しました。'ValueError: shape mismatch: Objects cannot be broadcast to a single shape'.
-
[解決済み] マップされたテーブルの主キー列を組み立てられませんでした。
-
[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
-
[解決済み] ファンクタを呼び出し可能なクラスとして、またはネストされた関数として作成する [終了] 。
-
(int "ではなく)strをstrに連結するとエラーが発生する。
-
[Python Learning] [scikit-learn] Pipeline reports error fit_transform() takes 2 positional arguments but were 3 given.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: 'type'オブジェクトは、辞書にインデックスを付けるときに添え字になりません。
-
[解決済み】plt.close()とplt.clf()の違いについて)
-
[解決済み] Y軸の微小目盛りをオンにする方法 matplotlib
-
[解決済み】sqlite3.ProgrammingError: 指定されたバインディングの数が正しくありません。現在の文は 1 を使用しており、74 が供給されています。
-
VSで「この関数または変数は安全でない可能性があります」エラーの解決法
-
[解決済み] TypeError: 'dict' オブジェクトは dict( ) の使用中に呼び出し可能ではありません。
-
[解決済み] Spyder IDEでMatplotlibを使用してインラインまたは別ウィンドウでプロットする。
-
[解決済み] Kerasレイヤーの重みをリセットする
-
'dict' オブジェクトに 'has_key' 属性がない ソリューション
-
[解決済み】Jupyterコマンド'notebook'の実行に失敗しました。[Errno 'jupyter-notebook' not found] 2