Como criar um arquivo de ovo Python

91

Tenho dúvidas sobre arquivos de ovo em Python.

Tenho muito código Python organizado por pacote e estou tentando criar arquivos de ovo. Estou seguindo instruções , mas são muito comuns.

De acordo com isso, parece que preciso de um arquivo setup.py.

  1. Você poderia me dizer o que eu preciso colocar no arquivo setup.py e onde ele deve residir?
  2. Suponho que seja suficiente criar setup.py e então iniciar "setup.py bdist_egg" para obter o arquivo egg. Você poderia confirmar?
  3. É possível incluir apenas arquivos .pyc no arquivo egg?
  4. Tendo o arquivo .egg, como posso simplesmente iniciar o código dele sem descompactar como java -jar <jar file>faz?
yart
fonte
O que devo usar em vez de ovos, então? Aqui está minha pergunta sobre ovos stackoverflow.com/questions/14902732/…
Verde
@YauhenYakimovich: esse link agora é um domínio de spam estacionado. Vale a pena editar para usar o packaging.python.org/en/latest/wheel_egg ?
Chris Adams,

Respostas:

74

Você está lendo a documentação errada. Você quer isso: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. A criação de setup.py é abordada na documentação do distutils na documentação da biblioteca padrão do Python aqui . A diferença principal (para ovos Python) é que você import setuppartir setuptools, não distutils.

  2. Sim. Isso deve estar certo.

  3. Acho que não. pycos arquivos podem ser dependentes da versão e da plataforma. Você pode conseguir abrir o egg (eles deveriam ser apenas arquivos zip) e deletar .pyarquivos que deixam .pycarquivos, mas isso não seria recomendado.

  4. Não tenho certeza. Isso pode ser “Modo de Desenvolvimento”. Ou você está procurando algum modo “py2exe” ou “py2app”?

meloso
fonte
51
+1: Nunca inclua os arquivos .pyc. Eles são totalmente confusos. Nós acidentalmente copiamos os arquivos .pyc do Windows para uma caixa Linux e recebemos as mensagens de rastreamento de erros mais confusas de todos os tempos. Porque os nomes dos arquivos onde os nomes dos arquivos originais do Windows. Foi assustador ver aqueles nomes de arquivos do Windows no servidor de produção.
S.Lott
basta usar o pyinstaller
Nickpick
30

Para o nº 4, a coisa mais próxima de iniciar o java com um arquivo jar para seu aplicativo é um novo recurso no Python 2.6, arquivos zip executáveis ​​e diretórios .

python myapp.zip

Onde myapp.zip é um zip contendo um __main__.pyarquivo que é executado como o arquivo de script a ser executado. As dependências do seu pacote também podem ser incluídas no arquivo:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

Você também pode executar um ovo, mas o encantamento não é tão bom:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

Isso coloca o myapp.egg no caminho do Python e usa o argumento -m para executar um módulo. Seu myapp.egg provavelmente será semelhante a:

myapp/__init__.py
myapp/somelibfile.py

E o python será executado __init__.py(você deve verificar isso __file__=='__main__'em seu aplicativo para uso na linha de comando).

Os arquivos Egg são apenas arquivos zip, então você pode adicionar __main__.pyao seu egg com uma ferramenta zip e torná-lo executável em python 2.6 e executá-lo como ao python myapp.egginvés do encantamento acima onde a variável de ambiente PYTHONPATH é definida.

Mais informações sobre arquivos zip executáveis, incluindo como torná-los executáveis ​​diretamente com um shebang, podem ser encontradas no blog de Michael Foord sobre o assunto .

lambacck
fonte
Como alternativa, pode-se usar o ambiente virtual guide.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich
10

Acho que você deveria usar rodas python para distribuição em vez de ovo agora.

Rodas são o novo padrão de distribuição python e têm como objetivo substituir os ovos. O suporte é oferecido em pip> = 1.4 e setuptools> = 0.8.

Hanfei Sun
fonte
2
Você não pode importar uma roda, pelo que eu posso dizer. Às vezes, só quero implantar meu script junto com um ovo para torná-lo mais portátil.
Gillespie