Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonライブラリのバイトコンパイル


Pythonはインタプリタベースの言語です。ただし、スクリプト(.py拡張子)が実行されると、内部でソースコードがバイトコードにコンパイルされ、その後、バイトコードバージョンが自動的に削除されます。モジュール(プリコンパイルされた組み込みモジュールを除く)が最初にインポートされると、コンパイルされたバージョンも自動的にビルドされますが、拡張子が.pycで__pycache__フォルダーに保存されます。同じモジュールを再度インポートするための後続の呼び出しは、モジュールを再コンパイルせず、代わりにすでにビルドされたモジュールを使用します。

ただし、拡張子が.pyのPythonスクリプトファイルは、実行せずに明示的にコンパイルできます。 'py_compile' モジュールには'compile()'が含まれています その目的のために機能します。結果の.pycファイルの名前には、Pythonのバージョン番号が追加されます。 Python 3.7の場合、名前には「cpython-37」サフィックスが付いています。

通常、このモジュールは必要ありません。ただし、共有用のモジュールをインストールする場合、特に一部のユーザーがソースコードを含むディレクトリにバイトコードキャッシュファイルを書き込む権限を持っていない場合に便利です。

モジュールにはコマンドラインインターフェイスがあります。次のように–mスイッチを使用してインポートできます

E:\python37>python -m py_compile hello.py

これにより、「hello.cpython-37.pyc」ファイルが作成され、__pycache__サブフォルダーに保存されます。

バイトコンパイルは、py_compileモジュールのcompile()関数を使用してプログラムで実行することもできます。

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

拡張子が.pycのバイトコードファイルは、拡張子が.pyの通常のスクリプトと同じようにコマンドラインから直接実行できます。

E:\python37>python __pycache__/hello.cpython-37.pyc

ただし、バイトコードファイルをコンパイルしたのと同じバージョンのインタプリタで実行できます。他のバージョンのPythonで実行しようとすると、次のエラーが表示されます。

C:\python36>python e:hello.cpython-37.pyc
RuntimeError: Bad magic number in .pyc file

py_compileモジュールには、いくつかのソースファイルをコンパイルする別の関数main()があります。引数として指定されたファイルがコンパイルされ、結果のバイトコードが通常の方法でキャッシュされます。この関数は、ソースファイルを見つけるためにディレクトリ構造を検索しません。明示的に指定されたファイルのみをコンパイルします。

モジュールは、ファイルのコンパイル中にエラーが発生したときに発生するPyCompileError例外も定義します。 (これは、compile()関数でdoraiseオプションがTrueに設定されている場合にのみ発生します。

compile()関数のoptimizeオプションは、最適化レベルを制御し、組み込みのcompile()関数に渡されます。デフォルトの-1は、現在のインタプリタの最適化レベルを選択します。


  1. Python pyqrcodeモジュールを使用してQRコードを生成しますか?

    QRコードは、白い背景に正方形のグリッドに配置された黒い正方形で構成されており、カメラなどのイメージングデバイスで読み取ることができます。多くの商用追跡アプリケーションや、携帯電話ユーザー向けのさまざまなアプリケーションの支払いやWebサイトログインなどに広く使用されています。 pyqrcodeモジュールは、Pythonでqrcocodeを生成するために使用されます。データを効率的に保存するために、4つの標準化されたエンコードモード(数値、英数字、バイト/バイナリ、および漢字)があります。 英数字のqrcode pyqrcodeモジュールを使用します。 qrcodeを生成するために使用される

  2. Pythongetpassモジュール

    Pythonの標準ライブラリのgetpassモジュールで定義されている2つの関数があります。これらは、ユーザーの資格情報を検証した後にのみ端末ベースのアプリケーションを実行する必要がある場合に役立ちます。 getpass() この関数は、ユーザーにパスワードの入力を求めます。デフォルトでは、ユーザーが端末に入力したキーはエコーされません。また、端末に表示されるデフォルトのプロンプトは「パスワード」であり、パラメータとして文字列を指定することでカスタマイズできます。 次の例では、PythonプロンプトはWindowsのコマンドプロンプトターミナルから呼び出されます。入力したパスワードは端末