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:
Para controlar qué archivos terminan en su archivo tar, cree un nuevo archivo llamado
MANIFEST.inen el nivel raíz de su paquete. Por ejemplo, puede excluir directorios enteros de su distribución, utilizandorecursive-excludeen el archivoMANIFEST.in. En su caso, necesita que su archivoMANIFEST.incontenga:recursive-exclude tests *No es común incluir README y otros archivos en el directorio de paquetes de sitio, pero si realmente lo desea, vaya dentro de
package1y cree enlaces simbólicos a los archivos que desea incluir:cd package1 ln -s ../LICENSE ln -s ../README.md ln -s ../RELEASELuego 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:
- Excluir el directorio de
testsde la distribución de origen; - 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:
-
testsdirectorio detestspermanece en el archivo tar creado y se instala en los paquetes de sitio; - 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:
- La carpeta de pruebas no es un paquete (no tiene el archivo .py de inicio ), por lo que find_package no lo excluye.
- 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.*'']),
)