with what tutorial para framework espaƱol djangoproject develop applications python configuration setuptools

what - framework django para python



Problemas de setuptools-excluyendo paquetes, incluyendo archivos de datos (5)

Debe crear un nuevo archivo llamado MANIFEST.in en el nivel raíz de su paquete, luego siga estas instrucciones:

  1. Para controlar qué archivos terminan en su archivo tar, cree un nuevo archivo llamado MANIFEST.in en el nivel raíz de su paquete. Por ejemplo, puede excluir directorios enteros de su distribución, utilizando recursive-exclude en el archivo MANIFEST.in . En su caso, necesita que su archivo MANIFEST.in contenga:

    recursive-exclude tests *

  2. No es común incluir README y otros archivos en el directorio de paquetes de sitio, pero si realmente lo desea, vaya dentro de package1 y cree enlaces simbólicos a los archivos que desea incluir:

    cd package1 ln -s ../LICENSE ln -s ../README.md ln -s ../RELEASE

    Luego cambia la siguiente línea en tu setup.py:

    package_data = { '''': [''LICENSE'', ''README.md'', ''RELEASE'']

    a:

    package_data = { ''package1'': [''LICENSE'', ''README.md'', ''RELEASE'']

Soy bastante nuevo en setuptools. He visto algunas preguntas similares y me vuelve un poco loco que parezca seguir los consejos que he visto, pero setuptools todavía hace algo diferente a lo que quiero.

Aquí está la estructura de mi proyecto:

. .. package1/ __init__.py abc.py ... tests/ __init__.py test_package1.py LICENSE README.md RELEASE setup.py

Y aquí está el contenido de mi setup.py:

#!/usr/bin/env python import os #from distutils.core import setup from setuptools import setup, find_packages setup( name=''package1'', version=''1.1'', test_suite="tests", packages=find_packages(exclude=[''tests'']), include_package_data=True, package_data = { '''': [''LICENSE'', ''README.md5'', ''RELEASE''] }, )

Además, en mi archivo manifiesto tengo:

include LICENSE include RELEASE include README.md

Construyo el alquitrán con:

python setup.py sdist

Quiero:

  1. Excluir el directorio de tests de la distribución de origen;
  2. Tenga archivos de LICENCIA, README.md, LIBERACIÓN en el directorio de paquetes de sitios, ya sea en el nivel superior o dentro del directorio del paquete 1 (en este punto, aceptaré cualquiera de los dos).

En su lugar, esto es lo que sucede:

  1. tests directorio de tests permanece en el archivo tar creado y se instala en los paquetes de sitio;
  2. Los archivos se copian en el archivo, pero no se instalan en el directorio del paquete empaquetado en el sitio.

Me he quedado sin ideas, ¿puede alguien explicarme qué estoy haciendo mal y cómo solucionarlo?


Estaba probando todo y nada parecía funcionar, hasta que eliminé el directorio de build (después de ver otra respuesta mencionando *.egg-info/ directory ) y finalmente funcionó. python setup.py clean --all debería hacer el trabajo.


MANIFEST.in se encargaría de ello.

prune tests/ include LICENSE README.md RELEASE

Si tiene archivos estáticos para agregar, agréguelos con

... recursive-include package1/static *


Si tu estructura es verdadera:

  1. La carpeta de pruebas no es un paquete (no tiene el archivo .py de inicio ), por lo que find_package no lo excluye.
  2. include_package_data = True significa que todos los archivos de versión se incluirán si no se excluyen explícitamente.

así: intente una prueba de exclusión / * en su MANIFEST.in

Espero que haya ayudado


find_packages usa fnmatchcase para su filtrado de exclusión. Puede probar si su patrón de exclusión coincide con el nombre de un paquete de la siguiente manera:

>>> from fnmatch import fnmatchcase >>> fnmatchcase(''my.package.name.tests'', ''tests'') False

Suponiendo que todas las pruebas en su proyecto viven en nombres de paquetes que terminan en tests o subpaquetes de esos paquetes, lo siguiente debería ser suficiente para excluir todo el código de prueba:

setup( name=''package1'', version=''1.1'', packages=find_packages(exclude=[''tests'', ''*.tests'', ''*.tests.*'']), )