なぜpycやpyoではなくpyですか?


8

私がpython debパッケージをインストールするときpython-numpy、ファイルが単純なpythonファイルであると言います。パッケージマネージャーにどのように伝えるのですか-実際にはpycまたはさらに良い-pyoファイルを使用したいのですか?

回答:


12

あなたはすでにそれらを持っています、そしてあなたはすでにそれらを使用しています

適切にパッケージ化されたPythonアプリケーションは、ファイルのインストールが行われた後に.pyc実行されるスクリプトでファイルにコンパイルされます。これは、パッケージガイドラインに従って、その時点で使用しているPythonインストールに採用できるようにするために必要です。ファイルはシステムに非常に固有であることを忘れないでください(Pythonのバージョンと依存関係)。.pyc

したがって、すべての.pyoおよび.pycファイルは、パッケージで明確に除外され、Lintianによってエラーとしてタグ付けされます。

コンパイルされたpythonソースファイルをパッケージに含めないでください。これらのファイルはパッケージから削除し、パッケージのインストール時にpostinstで作成する必要があります。

詳細については、Debian Pythonポリシーセクション2.6(Modules Byte-Compilation)を参照してください。

重大度:深刻、確実性:確実

python-numpyこのインストール後の場合、バイトコンパイルはpycentralのdebhelperフックによって処理されます。インストール後は次のようになります。

ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx  1 root root     47 Mar 20  2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r--  1 root root 251912 Aug  6 22:06 add_newdocs.pyc

いくつかの背景情報

これらの.pyc/ .pyoファイルが実行時に最初のアプリケーションの起動時に予期したとおりにコンパイルされない理由は次のとおりです。

Pythonファイルはシステム全体のディレクトリにインストールされ、システム上のすべてのユーザーが使用できます。ユーザーがアプリケーションを起動すると、Pythonインタープリターは.pyファイルを読み取ることができますが、ディレクトリー(など/usr/lib/python2.7/dist-packages/)に書き込むことはできません。これは、すべてのLinuxシステムの一般的なセキュリティの一部です。ユーザーはに書き込みを行うべきではありません/usr。これはroot権限でのみ可能です。このため、APTフックはインストール時にPythonファイルをコンパイルします。1つ目はパッケージサイズを最小化すること、2つ目はPythonに関してシステムで何かが変更されたときにフックを再トリガーできるようにすることです。たとえば、アップグレード中に互換性がなくなったときに再コンパイルする必要があるためです。

ただし、これは実行時にコンパイルされる通常のユーザー所有のPythonファイルには影響しません。


だから私は/usr/share/pyshared/自分自身に書き込み可能にする必要があります-最初の実行でpythonがファイルをコンパイルできるようにするためです。
Adobe

4
@Adobeなに?番号!これらのシステムディレクトリをユーザーが書き込み可能にしないでください。あなたのパッケージ管理はあなたのためにそれらをすでにコンパイルしました(私が私の答えで言いたかったことに従って)。それをより明確にするために更新されました。
gertvdijk 2013年

あなたは今-私が見ただけです/usr/lib/python2.7/dist-packages/numpy- pycファイルがあります。私はいくつかのインストールでそこを見たのを覚えています-プレーンなpyファイルしかありませんでした。だから、「バグを再現できない」みたいな。
Adobe

.pycがまだ存在しない唯一の理由は、パッケージが完全にインストールされていないことです。開梱後、実行する必要がある他の手順があります。IIRC python-centralフックは、すべてのパッケージがインストールされた後にのみ実行されます。したがって、実行中または中断されたAPTセッションでパッケージをインストールすると、おそらくあなたが説明した観察を行うことができます。
gertvdijk 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.