Kiedy instaluję pakiet deb Python, powiedzmy, że python-numpy
pliki są zwykłymi plikami Python. Jak powiedzieć menedżerowi pakietów - że wolałbym używać plików pyc lub nawet lepiej - plików pyo?
Kiedy instaluję pakiet deb Python, powiedzmy, że python-numpy
pliki są zwykłymi plikami Python. Jak powiedzieć menedżerowi pakietów - że wolałbym używać plików pyc lub nawet lepiej - plików pyo?
Odpowiedzi:
Dobrze spakowane aplikacje Pythona są kompilowane do .pyc
plików w skrypcie uruchamianym po instalacji plików. Jest to potrzebne zgodnie z wytycznymi dotyczącymi pakowania, aby móc dostosować się do instalacji Pythona, której używasz w tym momencie. Pamiętaj, że .pyc
pliki są bardzo specyficzne dla twojego systemu (wersja i zależności Pythona).
Dlatego wszystkie pliki .pyo
i .pyc
są specjalnie wykluczone w pakietach i oznaczone przez Lintian jako błędy :
Skompilowane pliki źródłowe Pythona nie mogą być zawarte w pakiecie. Pliki te należy usunąć z pakietu i utworzyć podczas instalacji pakietu w postinst.
Szczegółowe informacje znajdują się w Polityce Python w dziale 2.6 ( Kompilacja bajtów modułów ).
Istotność: poważna, Pewność: pewna
W przypadku python-numpy
tej poinstalacyjnej kompilacji bajtów jest obsługiwany przez hak debhelper pycentral. Po instalacji wygląda to tak:
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
Powód, dla którego te .pyc
/ .pyo
pliki nie są kompilowane w czasie wykonywania podczas pierwszego uruchomienia aplikacji, zgodnie z oczekiwaniami, jest następujący.
Pliki Python są instalowane w ogólnosystemowym katalogu, dostępnym dla wszystkich użytkowników w systemie. Za każdym razem, gdy użytkownik uruchamia aplikację, interpreter Pythona może czytać .py
pliki, ale nie może zapisywać do katalogów (np /usr/lib/python2.7/dist-packages/
.). Jest to część ogólnego bezpieczeństwa we wszystkich systemach Linux; użytkownicy nie powinni pisać /usr
, tylko z prawami roota powinno to być możliwe. Z tego powodu punkty zaczepienia APT skompilują dla Ciebie pliki Python podczas instalacji; po pierwsze, aby zminimalizować rozmiar pakietu, po drugie, aby móc ponownie uruchomić haki, gdy coś zmieni się w twoim systemie w odniesieniu do Pythona, ponieważ wymagana jest ponowna kompilacja, gdy na przykład nie będą kompatybilne podczas aktualizacji.
Nie wpłynie to jednak na kompilację zwykłych plików Pythona tworzonych przez użytkownika w czasie wykonywania.
/usr/lib/python2.7/dist-packages/numpy
- są pyc
pliki. Pamiętam, że szukałem tam na kilku instalacjach - i były tam tylko zwykłe pliki py. Więc trochę „nie mogę odtworzyć błędu”.
.pyc
jeszcze go nie ma, jest to, że pakiet nie został całkowicie zainstalowany. Po rozpakowaniu należy podjąć inne kroki. IIRC hak centralny Pythona jest uruchamiany dopiero po zainstalowaniu wszystkich pakietów. Tak więc podczas trwającej lub przerywanej sesji APT instalującej pakiet prawdopodobnie można dokonać opisanej obserwacji.
/usr/share/pyshared/
napisać do siebie - aby umożliwić Pythonowi kompilowanie plików przy pierwszym uruchomieniu.