Respostas:
Aplicativos Python bem compactados estão sendo compilados em .pyc
arquivos em um script executado após a instalação dos arquivos. Isso é necessário de acordo com as diretrizes de empacotamento para poder adotar a instalação do Python que você está usando naquele momento. Lembre-se de que os .pyc
arquivos são muito específicos ao seu sistema (versão e dependências do Python).
Portanto, todos os arquivos .pyo
e .pyc
são excluídos especificamente nos pacotes e marcados como erros pelo Lintian :
Arquivos de origem python compilados não devem ser incluídos no pacote. Esses arquivos devem ser removidos do pacote e criados no momento da instalação do pacote no postinst.
Consulte a seção 2.6 da Debian Python Policy ( Modules Byte-Compilation ) para obter detalhes.
Gravidade: grave, Certeza: certa
No caso python-numpy
desta compilação de bytes pós-instalação, ela é manipulada pelo gancho debhelper do pycentral. Após a instalação, fica assim:
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
O motivo pelo qual esses arquivos .pyc
/ .pyo
não são compilados em tempo de execução durante a primeira inicialização do aplicativo, conforme o esperado, é o seguinte.
Os arquivos Python são instalados em um diretório de todo o sistema, disponível para todos os usuários no sistema. Sempre que um usuário inicia o aplicativo, o interpretador Python pode ler os .py
arquivos, mas não pode gravar nos diretórios (por exemplo /usr/lib/python2.7/dist-packages/
). Isso faz parte da segurança geral em todos os sistemas Linux; os usuários não devem escrever /usr
, apenas com direitos de root isso deve ser possível. Por esse motivo, os ganchos do APT compilarão os arquivos Python para você no momento da instalação; em primeiro lugar, para minimizar o tamanho do pacote, em segundo lugar, para poder reativar os ganchos quando algo mudar no seu sistema em relação ao Python, porque é necessário recompilar quando ficarem incompatíveis durante as atualizações, por exemplo.
No entanto, isso não afetará os arquivos python comuns pertencentes ao usuário que estão sendo compilados em tempo de execução.
/usr/lib/python2.7/dist-packages/numpy
- há pyc
arquivos. Lembro que procurei lá em instalações seveal - e havia apenas arquivos py simples. Então eu meio que "não consigo reproduzir o bug".
.pyc
ainda não estaria lá é que o pacote não foi instalado completamente. Depois de desembalar, existem outras etapas a serem seguidas. IIRC, o gancho python-central é executado somente após a instalação de todos os pacotes. Portanto, em uma sessão APT em execução ou interrompida, instalando o pacote, a observação que você descreveu pode ser feita provavelmente.
/usr/share/pyshared/
gravável para mim mesmo - para permitir que o python compile arquivos na primeira execução.