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.in
en el nivel raíz de su paquete. Por ejemplo, puede excluir directorios enteros de su distribución, utilizandorecursive-exclude
en el archivoMANIFEST.in
. En su caso, necesita que su archivoMANIFEST.in
contenga: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
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:
- Excluir el directorio de
tests
de 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:
-
tests
directorio detests
permanece 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.*'']),
)