답변:
잘 패키지 된 Python 응용 프로그램은 .pyc
파일 설치가 완료된 후 스크립트 실행 으로 파일 로 컴파일됩니다 . 이는 현재 사용중인 Python 설치에 적용 할 수 있도록 패키징 지침에 따라 필요합니다. 그 기억하십니까 .pyc
파일 (파이썬 버전 및 종속성) 시스템에 매우 다릅니다.
따라서 Lintian 은 모든 파일 .pyo
과 .pyc
파일을 패키지에서 제외 하고 오류로 태그를 지정합니다 .
컴파일 된 파이썬 소스 파일은 패키지에 포함되지 않아야합니다. 이 파일들은 패키지에서 제거되고 postinst에서 패키지 설치시 작성되어야합니다.
자세한 내용은 데비안 파이썬 정책 섹션 2.6 ( 모듈 바이트 컴파일 )을 참조하십시오.
심각도 : 심각성, 확실성 : 특정
의 경우 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
루트 권한 만 있으면 가능합니다. 이러한 이유로 APT 후크는 설치시 Python 파일을 컴파일합니다. 첫째, 패키지 크기를 최소화하기 위해, 둘째로 파이썬과 관련하여 시스템에서 무언가가 변경되면 후크를 다시 트리거 할 수 있습니다. 예를 들어 업그레이드 중에 호환되지 않을 때 다시 컴파일해야하기 때문입니다.
그러나 이것은 런타임에 컴파일되는 일반 사용자 소유의 파이썬 파일에는 영향을 미치지 않습니다.
/usr/lib/python2.7/dist-packages/numpy
- pyc
파일 들이 있습니다. 나는 몇 가지 설치를 보았고 평범한 py 파일 만 있다는 것을 기억합니다. 그래서 저는 일종의 "버그를 재현 할 수 없습니다".
.pyc
아직 존재하지 않는 유일한 이유 는 패키지가 완전히 설치되지 않았기 때문입니다. 포장을 푼 후에는 다른 단계를 수행해야합니다. IIRC python-central hook은 모든 패키지가 설치된 후에 만 실행됩니다. 따라서 패키지를 설치하는 실행 중이거나 중단 된 APT 세션에서 설명한 관찰을 수행 할 수 있습니다.
/usr/share/pyshared/
python이 첫 번째 실행에서 파일을 컴파일 할 수 있도록하려면 쓰기가 가능 해야 합니다.