Почему пи, а не pyc или pyo?

7

Когда я устанавливаю пакет debato python, скажем, python-numpy , файлы - это простые файлы python. Как сообщить диспетчеру пакетов, что я на самом деле предпочитаю использовать pyc или даже лучше - файлы pyo?

    
задан Adobe 16.01.2013 в 10:58
источник

1 ответ

11

У вас уже есть их, и вы уже используете их

Хорошо упакованные приложения Python скомпилируются в .pyc файлов при запуске скрипта после . Это необходимо в соответствии с инструкциями по упаковке, чтобы иметь возможность адаптироваться к установке Python, которую вы используете в данный момент. Помните, что .pyc файлов очень специфичны для вашей системы (версия Python и зависимости).

Все .pyo и .pyc файлов поэтому специально исключены в пакетах и ​​ помечены как ошибки от Lintian :

  

Скомпилированные исходные файлы python не должны включаться в пакет. Эти файлы должны быть удалены из пакета и созданы во время установки пакета в postinst.

     

Обратитесь к политике Debian Python в разделе 2.6 (Modules Byte-Compilation ) для деталей.

     

Тяжесть: серьезная, определенность: определенная

В случае python-numpy эта пост-установочная байт-компиляция обрабатывается крючком debhelper pycentral. После установки он выглядит следующим образом:

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 для вас во время установки; во-первых, чтобы минимизировать размер пакета, во-вторых, чтобы иметь возможность перезапускать крючки, как только что-то изменится в вашей системе относительно Python, потому что требуется перекомпилировать, когда они становятся несовместимыми во время обновлений, например.

Однако это не повлияет на регулярные пользовательские файлы python, скомпилированные во время выполнения.

    
ответ дан gertvdijk 16.01.2013 в 11:14
источник

Ознакомьтесь с другими вопросами по меткам