Por que py e não pyc ou pyo? -- package-management campo com python camp askubuntu Relacionado O problema

Why py and not pyc or pyo?


8
vote

problema

português

Quando eu instalar um pacote Python Deb, digamos python-numpy os arquivos são arquivos Python simples. Como faço para dizer ao Gerenciador de Pacotes - que eu realmente preferiria usar PYC ou mesmo melhor - arquivos Pyo?

english

When I install a python deb package, say python-numpy the files are plain python files. How do I tell to the package manager -- that I actually would rather use pyc or even better -- pyo files?

     

Lista de respostas

12
 
vote
vote
Melhor resposta
 

você já tem eles e você já está usando-os

Aplicativos de Python bem embalados estão sendo compilados para ABCDEFGHIJKLMNABCDEFGHIJKLMN0 Arquivos em um script Executar após A instalação dos arquivos ocorreu. Isso é necessário de acordo com as diretrizes de embalagem para serem capazes de adotar à instalação do Python que você está usando naquele momento. Lembre-se de que .pyc os arquivos são muito específicos para o seu sistema (versão e dependências do Python).

Abcdefghijklmnabcdefghijklmn2 e .pyc Os arquivos são, portanto, especificamente excluídos em pacotes e marcado como erros de Lintian :

.

Os arquivos de origem Python compilados não devem ser incluídos no pacote. Esses arquivos devem ser removidos do pacote e criado no tempo de instalação do pacote no Postinst.

refere-se a Debian Python Policy Seção 2.6 ( módulos byte-compilação ) para obter detalhes.

gravidade: sério, certeza: certo

No caso de ABCDEFGHIJKLMNABCDEFGHIJKLMN4 Esta compilação de byte pós-instalação é tratada pelo gancho de Debelper de PyCentral. Após a instalação, parece que esta:

  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    

Mais informações de antecedentes

A razão para que estes .pyc / .pyo Os arquivos não são compilados no 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íveis para todos os usuários no sistema. Sempre que um usuário iniciar o aplicativo, o intérprete Python pode ler os arquivos .py , 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 para ABCDEFGHIJKLMNABCDEFGHIJKLMN10 , apenas com direitos de raiz, isso deve ser possível. Por esse motivo, os ganchos apt compilarão os arquivos Python para você no tempo de instalação; Primeiramente para minimizar o tamanho da embalagem, em segundo lugar, para poder retirar os ganchos, uma vez que algo muda em seu sistema em relação ao python, porque é necessário recompilar quando eles são incompatíveis durante as atualizações, por exemplo,

Isso não, no entanto, afeta os arquivos de Python regulares de propriedade regular sendo compilados no tempo de execução.

 

You already have them and you're already using them

Well-packaged Python applications are being compiled to .pyc files in a script run after installation of the files has taken place. This is needed according to the packaging guidelines to be able to adopt to the Python installation you're using at that moment. Do remember that .pyc files are very specific to your system (Python version and dependencies).

All .pyo and .pyc files are therefore specifically excluded in packages and tagged as errors by Lintian:

Compiled python source files must not be included in the package. These files should be removed from the package and created at package installation time in the postinst.

Refer to Debian Python Policy section 2.6 (Modules Byte-Compilation) for details.

Severity: serious, Certainty: certain

In the case of python-numpy this post-install byte-compilation is handled by the debhelper hook of pycentral. After installation it looks like this:

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 

Some more background information

The reason for why these .pyc/.pyo files aren't compiled at runtime during the first application startup as you expected is the following.

The Python files are installed in a system-wide directory, available for all users on the system. Whenever a user starts the application, the Python interpreter can read the .py files, but it can't write to the directories (e.g. /usr/lib/python2.7/dist-packages/). This is part of general security in all Linux systems; users shouldn't write to /usr, only with root rights this should be possible. For this reason, the APT hooks will compile the Python files for you at installation time; firstly to minimize the package size, secondly to be able to retrigger the hooks once something changes on your system regarding Python, because it's required to recompile when they get incompatible during upgrades for example.

This won't, however, affect regular user-owned python files being compiled at runtime.

 
 
       
       

Perguntas relacionadas

2  Como faço para usar um modelo de comunidade rápida (por exemplo, Ubuntu-Application-QT)?  ( How do i use a quickly community template e g ubuntu application qt ) 
Eu gostaria de olhar para os modelos QT e QTQuick para rapidamente. A documentação para eles parece ser inexistente. Mas eu encontrei uma pergunta anteriormen...

0  Os scripts do Python não podem encontrar a porta serial do Ttyacm0  ( Python scripts cannot find ttyacm0 serial port ) 
Eu tenho um arduino mega 2560 enviando dados, meu ambiente é o Ubuntu 14.04, é um nó Python Ros. Problema é que ele funciona bem quando uso o monitor serial...

4  Python não funcionará no terminal  ( Python wont run in terminal ) 
Na tentativa de obter Cairoplot correr corretamente no meu Ubuntu 11.04, eu estupidamente copiei o CairoPlot.py para o meu /usr/local/bin/python dir. Quando...

0  Como instalar o Python3.6 (Dev) no Ubuntu 16.04 sem colidir com Python3.5 (Dev)  ( How to install python3 6 dev on ubuntu 16 04 without colliding with python3 5 ) 
Eu tenho um aplicativo que deve ser executado em python3.6 e eu preferiria executá-lo em um sistema operacional Ubuntu 16.04. Problema é que, eventualmente,...

0  O HPLip não instala em 20,04 por causa do Python 3 (o que fazer?)  ( Hplip wont install on 20 04 because of python 3 what to do ) 
Estou tentando instalar o mais recente hplip seguindo Este guia . Para resumir você executar o seguinte: sudo apt-get purge hplip hplip-data hplip-doc hpl...

4  Como obter pyqt5 para python2 no ubuntu 20.04  ( How to get pyqt5 for python2 on ubuntu 20 04 ) 
Eu tenho um aplicativo PYQT5 crítico que ainda está na migração para as fases Python3. O K / Ubuntu 20.04 removeu a embalagem necessária para instalar o PYQT...

16  Problema de instalação do Python-Dev  ( Problem installing python dev ) 
Estou tendo problemas para instalar python-dev . Tudo começou quando tentei instalar outro pacote Python e recebi o erro: SystemError: Cannot compile 'Pyt...

2  Aplicativo não inicia após a instalação. Correr "rapidamente correr" funciona perfeitamente  ( Application does not start after installing running quickly run works perfect ) 
Eu fiz minha inscrição para o Ubuntu App Showdown. Quando eu o inicio do terminal usando quickly run funciona bem. Eu empacotei com quickly package e inst...

3  Por que meu script Python falha com erros de sintaxe?  ( Why does my python script fail with syntax errors ) 
Ao executar o programa Simple Python abaixo, estou recebendo o seguinte erro: Remote1 Remote2 ...

4  Como criar appmenu em usar python3 e pyqt?  ( How to create appmenu in using python3 and pyqt ) 
Estou à procura de uma maneira de criar indicador de Appmenu usando Python3.2 e PYQT4. Por favor me ajude. ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.