web-dev-qa-db-ja.com

* .pycファイル(deb-packagesに関連する)が作成され、それらを再作成する方法は?

2つのUbuntu 18.04.1 LTSシステムがあります。

  1. ubuntu 18.04.1 LTSのクリーンインストール
  2. ubuntu 16.04.5 LTSからアップグレード

注:両方のシステムのすべてのものはAPTを使用してインストールされています(fromdeb-packages) 。 pip/pip3make installcheckinstallおよびその他の同様のユーティリティは使用しませんでした。だから、それは絶対に話題です。 Ubuntuで、UbuntuはAPTを使用します。

最初のシステムには、次のpyc-ファイルがあります。

  • /usr/lib/python2.7/dist-packages/gi/overrides/Dee.pyc
  • /usr/lib/python3/dist-packages/gi/overrides/__pycache__/Dee.cpython-36.pyc
  • /usr/lib/python2.7/dist-packages/gi/overrides/Unity.pyc
  • /usr/lib/python3/dist-packages/gi/overrides/__pycache__/Unity.cpython-36.pyc

2番目のシステムにはこれらのファイルがありません。

dpkg -Sでこれらのファイルのパッケージが見つかりません。しかし、スクリプト(*.py)を見つけることができます。

私の知る限り、これらのファイルはgir1.2-dee-1.0gir1.2-unity-5.0からのものです。
ただし、これらのパッケージを再インストールした後、*.pycファイルは作成されません。

なにが問題ですか?
その場所で*.pycを取得する方法は?これらのファイルがなくてもシステムは正常に動作しますか?

2
N0rbert

私はAPTベースを待っています

APTとは関係がないため、しばらく時間がかかります;-)

なにが問題ですか?

なし。

それぞれの場所で* .pycを取得する方法は?

本当に必要な場合は、 py_compile を使用して手動で実行できます。 pythonコマンドラインから({pyfile.py}をコンパイルしたいものに置き換えます):

>>> import py_compile
>>> py_compile.compile('{pyfile.py}')

また、ディレクトリ内のすべてをコンパイルできるコマンドラインメソッドもあります...

python -m compileall .

ただし、実際にそうする必要はありません。これらは、マシンでソフトウェアを使用するときに作成されます。これが、APTとは関係がない理由でもあります。

これらのファイルがなくてもシステムは正常に動作しますか?

はい。

実際に起こること:モジュールがインポートされるか、ソースが変更されると、コンパイルされたコードを含む.pycファイルが.py fileと同じディレクトリに作成されます。このファイルは、そのモジュールのコンパイル手順をスキップするために使用されます。実行時に数ミリ秒のシェービング(通常の使用では重要ではありませんが、1秒以内に同じスクリプトを1000回呼び出すWebサーバーを想像してください。これらのミリ秒は突然重要になります)。

.pycファイルがどこにも表示されないことについて:

pythonがコンパイルできない場合があります。 1つの例は、コンパイルが保存される場所にファイルを作成することを許可されていない2番目のユーザーを使用する場合です。実行は停止せず、ソース(コンパイルされたバージョンではなく)を使用します(スクリプトの実行はインポートとは見なされません。これはモジュールに対してのみ行われます)。

4
Rinzwind

*.pycファイルには、Python bytecode が含まれます。それらは、対応する*.pyファイルが初めて実行されるときに作成されます(対応する*.pyが変更された後の最初の実行で更新されます)。

マシンのPythonインタープリターは*.pycファイルを作成でき、オンザフライで作成できるため、*.pycファイルは_に含まれませんAPTリポジトリ。含まれている対応する*.pyファイルからマシン上で生成されます。

その結果、より長い時間使用され、より多くのアプリケーションを実行しているマシンには、これらのファイルをクリーンアップしない限り、クリーンOSインストールよりも多くの*.pycファイルが含まれる可能性があります。

こちらもご覧ください:

1
Melebius