setup.py exemplos?

depois de estudar esta página:

Http://docs.python.org/distutils/builtdist.html

Estou à espera de encontrar algum setup.py arquivos para estudar de modo a fazer o meu próprio (com o objetivo de fazer um arquivo rpm fedora).

Poderá a Comunidade Europeia indicar-me alguns bons exemplos?

 61
Author: jedierikb, 2011-01-19

6 answers

Passar completamente a escrita setup.py scripts aqui . (com alguns exemplos)

Se quiser um exemplo do mundo real, posso indicar-lhe os guiões de alguns grandes projectos. O Django está aqui, o pyglet está aqui. Você pode apenas navegar na fonte de outros projetos para um arquivo chamado setup.py para mais exemplos.

Estes não são exemplos simples; o link do tutorial que eu dei tem esses. Estes são mais complexos, mas também mais práticos.

 45
Author: Rafe Kettler, 2016-07-24 09:22:13

Você pode achar útil o Guia de boleia para a embalagem , mesmo que esteja incompleto. Eu começaria com o tutorial de arranque rápido. Tente também navegar pelos pacotes Python no índice de pacotes Python . Descarregue o tarball, desfaça-o, e dê uma olhada no Arquivo setup.py. Ou melhor ainda, só se incomodam em olhar através de pacotes que listam um repositório de código fonte público, como um hospedado no GitHub ou BitBucket. Vais encontrar um no ... pagina.

A minha sugestão final é tentar fazer uma, não tenhas medo de falhar. Só percebi quando comecei a fazê-los eu mesmo. É trivial criar um novo pacote no PyPI e tão fácil de removê-lo. Então, crie um pacote falso e jogue.
 29
Author: gotgenes, 2014-12-15 19:15:28

LEIA ISTO PRIMEIRO https://packaging.python.org/en/latest/current.html

Recomendações Sobre Ferramentas De Instalação

  1. usar o pip para instalar pacotes Python de PyPI.
  2. Use virtualenv, ou pyvenv para isolar as dependências específicas da aplicação a partir de uma instalação em Python partilhada.
  3. utilize a roda do pip para criar uma reserva de distribuições de rodas, com o objectivo de acelerar as instalações subsequentes.
  4. Se você está procurando a gestão de pacotes de software totalmente integrados, considere buildout (principalmente focado na comunidade de desenvolvimento da web) ou Hashdist, ou conda (ambos focados principalmente na comunidade científica).

Recomendações Sobre Ferramentas De Embalagem

  1. Use setuptools para definir projetos e criar distribuições de código.
  2. utilize a extensão bdist_ Wheel setuptools disponível a partir do projecto wheel para criar rodas. Isto é especialmente benéfico, se o seu projecto contiver extensões Binárias.
  3. usar o fio para enviar as distribuições para o PyPI.

Este anwser envelheceu, e de facto há um plano de resgate para o mundo das embalagens python chamado

Wheels way

I qoute pythonwheels.com aqui.

O que são rodas?

As rodas são o novo padrão da distribuição python e se destinam a substituir ovos. O suporte é oferecido no pip > = 1, 4 e setuptools > = 0, 8.

Vantagens das rodas
  1. instalação mais rápida para python puro e pacotes de extensão C nativos.
  2. evita a execução arbitrária de código para instalação. (Evita setup.py)
  3. a instalação de uma extensão C não requer um compilador no Windows ou OS X.
  4. permite uma melhor cache para o ensaio e contínua integracao.
  5. Cria .arquivos pyc como parte da instalação para garantir combinam com a python. intérprete usado. Instalação mais consistente entre plataformas e máquinas.

A história completa da embalagem correcta em python (e sobre rodas) está coberta em packaging.python.org


Conda way

Para a computação científica (isso também é recomendado no packaging.python.org veja acima) que eu o considere utilizar CONDA embalagem, que pode ser visto como uma festa de 3 serviço de construir em cima do PyPI e pip ferramentas. Também funciona muito bem em a configurar a sua própria versão de [[78]}binstar

por isso imagino que possa fazer o truque para a gestão sofisticada de pacotes personalizados.

O Conda pode ser instalado numa pasta de Utilizador (sem permissões de super-utilizador) e funciona como o magic com

Conda install

E poderosa expansão de env virtual.


Eggs way

esta opção estava relacionada com python-distribute.org e é amplamente desactualizado (bem como o site) então deixe-me e virtualenv aqui para ficar! Ovos ... foi-se!

Adiciono mais um ponto (de mim)

  • rodas !

eu recomendaria para obter alguma compreensão de embalagem-ecossistema (a partir do Guia apontado por gotgenes) antes de tentar colagem de cópia sem sentido.

A maioria dos exemplos na Internet começam com

from distutils.core import setup

Mas isto, por exemplo, não suporta a construção de um ovo python setup.py bdist_egg (bem como algumas outrasantigas ), que estavam disponíveis em

from setuptools import setup

E a razão é que eles são depreciados.

Agora de acordo com o guia

Aviso

Por favor use o pacote distribuição em vez do pacote Setuptools porque há problemas neste pacote que podem e não vão ser corrigido.

Os setuptools obsoletos devem ser substituídos por destutils2 , que " será parte da biblioteca padrão em Python 3.3". Devo dizer que gostei de setuptools e ovos e ainda não fui completamente convencido pela conveniência dos destintos2. Requer

pip install Distutils2

E para instalar

python -m distutils2.run install

PS

Empacotamento nunca foi trivial (aprende-se isso tentando desenvolver um novo), então eu presumo que muitas coisas tenham ido por uma razão. Só espero que desta vez seja feito correctamente.

 24
Author: Yauhen Yakimovich, 2017-10-24 09:15:15

Eu recomendo o setup.py do projecto de exemplo do Python Packaging User Guide.

O Python Packaging User Guide "pretende ser o recurso autoritário sobre como embalar, publicar e instalar distribuições em Python usando ferramentas atuais".

 4
Author: Razzi Abuissa, 2018-05-08 19:28:15

Aqui você encontrará o exemplo mais simples possível de usar os destilados e setup.py:

Https://docs.python.org/2/distutils/introduction.html#distutils-simple-example

Isto assume que todo o seu código está num único ficheiro e diz como embalar um projecto que contém um único módulo.

 3
Author: Akshar Raaj, 2014-12-23 11:43:26

Veja este exemplo completo https://github.com/marcindulak/python-mycli de um pequeno pacote python. Baseia-se em recomendações de embalagem de https://packaging.python.org/en/latest/distributing.html , utilizações setup.py com destilados e, além disso, mostra como criar pacotes RPM e deb.

O projecto setup.py está incluído abaixo (ver o Acordo de recompra para a fonte completa):
#!/usr/bin/env python

import os
import sys

from distutils.core import setup

name = "mycli"

rootdir = os.path.abspath(os.path.dirname(__file__))

# Restructured text project description read from file
long_description = open(os.path.join(rootdir, 'README.md')).read()

# Python 2.4 or later needed
if sys.version_info < (2, 4, 0, 'final', 0):
    raise SystemExit, 'Python 2.4 or later is required!'

# Build a list of all project modules
packages = []
for dirname, dirnames, filenames in os.walk(name):
        if '__init__.py' in filenames:
            packages.append(dirname.replace('/', '.'))

package_dir = {name: name}

# Data files used e.g. in tests
package_data = {name: [os.path.join(name, 'tests', 'prt.txt')]}

# The current version number - MSI accepts only version X.X.X
exec(open(os.path.join(name, 'version.py')).read())

# Scripts
scripts = []
for dirname, dirnames, filenames in os.walk('scripts'):
    for filename in filenames:
        if not filename.endswith('.bat'):
            scripts.append(os.path.join(dirname, filename))

# Provide bat executables in the tarball (always for Win)
if 'sdist' in sys.argv or os.name in ['ce', 'nt']:
    for s in scripts[:]:
        scripts.append(s + '.bat')

# Data_files (e.g. doc) needs (directory, files-in-this-directory) tuples
data_files = []
for dirname, dirnames, filenames in os.walk('doc'):
        fileslist = []
        for filename in filenames:
            fullname = os.path.join(dirname, filename)
            fileslist.append(fullname)
        data_files.append(('share/' + name + '/' + dirname, fileslist))

setup(name='python-' + name,
      version=version,  # PEP440
      description='mycli - shows some argparse features',
      long_description=long_description,
      url='https://github.com/marcindulak/python-mycli',
      author='Marcin Dulak',
      author_email='[email protected]',
      license='ASL',
      # https://pypi.python.org/pypi?%3Aaction=list_classifiers
      classifiers=[
          'Development Status :: 1 - Planning',
          'Environment :: Console',
          'License :: OSI Approved :: Apache Software License',
          'Natural Language :: English',
          'Operating System :: OS Independent',
          'Programming Language :: Python :: 2',
          'Programming Language :: Python :: 2.4',
          'Programming Language :: Python :: 2.5',
          'Programming Language :: Python :: 2.6',
          'Programming Language :: Python :: 2.7',
          'Programming Language :: Python :: 3',
          'Programming Language :: Python :: 3.2',
          'Programming Language :: Python :: 3.3',
          'Programming Language :: Python :: 3.4',
      ],
      keywords='argparse distutils cli unittest RPM spec deb',
      packages=packages,
      package_dir=package_dir,
      package_data=package_data,
      scripts=scripts,
      data_files=data_files,
      )

E o ficheiro Spec RPM que mais ou menos segue Fedora / EPEL as directrizes para a embalagem podem parecer:

# Failsafe backport of Python2-macros for RHEL <= 6
%{!?python_sitelib: %global python_sitelib      %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch:    %global python_sitearch     %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%{!?python_version: %global python_version      %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")}
%{!?__python2:      %global __python2       %{__python}}
%{!?python2_sitelib:    %global python2_sitelib     %{python_sitelib}}
%{!?python2_sitearch:   %global python2_sitearch    %{python_sitearch}}
%{!?python2_version:    %global python2_version     %{python_version}}

%{!?python2_minor_version: %define python2_minor_version %(%{__python} -c "import sys ; print sys.version[2:3]")}

%global upstream_name mycli


Name:           python-%{upstream_name}
Version:        0.0.1
Release:        1%{?dist}
Summary:        A Python program that demonstrates usage of argparse
%{?el5:Group:       Applications/Scientific}
License:        ASL 2.0

URL:            https://github.com/marcindulak/%{name}
Source0:        https://github.com/marcindulak/%{name}/%{name}-%{version}.tar.gz

%{?el5:BuildRoot:   %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)}
BuildArch:      noarch

%if 0%{?suse_version}
BuildRequires:      python-devel
%else
BuildRequires:      python2-devel
%endif


%description
A Python program that demonstrates usage of argparse.


%prep
%setup -qn %{name}-%{version}


%build
%{__python2} setup.py build


%install
%{?el5:rm -rf $RPM_BUILD_ROOT}
%{__python2} setup.py install --skip-build --prefix=%{_prefix} \
   --optimize=1 --root $RPM_BUILD_ROOT


%check
export PYTHONPATH=`pwd`/build/lib
export PATH=`pwd`/build/scripts-%{python2_version}:${PATH}
%if 0%{python2_minor_version} >= 7
%{__python2} -m unittest discover -s %{upstream_name}/tests -p '*.py'
%endif


%clean
%{?el5:rm -rf $RPM_BUILD_ROOT}


%files
%doc LICENSE README.md
%{_bindir}/*
%{python2_sitelib}/%{upstream_name}
%{?!el5:%{python2_sitelib}/*.egg-info}


%changelog
* Wed Jan 14 2015 Marcin Dulak <[email protected]> - 0.0.1-1
- initial version
 3
Author: marcindulak, 2016-04-19 21:13:30