¿Es posible incluir subdirectorios que utilicen dist utils (setup.py) como parte de los datos del paquete?

Básicamente mi paquete de python está configurado como:

module \_examples \_folder1 \_file1.py \_file2.py \_folder2 \_file1.py \_file2.py 

Básicamente solo quiero usar:

 package_data = { 'module': ['examples/*'], }, 

porque mi proyecto siempre tiene personas que agregan ejemplos y quiero que sea fácil enumerarlos desde mi aplicación. Puedo hacer que funcione para cualquier ARCHIVO dentro de ejemplos, pero no volver a maldecir a través de los subdirectorios. es posible?

Creo que lo que está buscando es algo como esto para usted setup.py , que buscará recursivamente cualquier paquete en el proyecto, también asegúrese de incluir archivos __init__.py en los subdirectorios de cada paquete que desee.

 from setuptools import setup, find_packages setup(name='MySoftware', packages=find_packages() } 

Tendrás que usar un archivo MANIFEST.in para eso.

Creo que querrás algo como esto:

 $ cat MANIFEST.in
 recursivo-incluye ejemplos / * .py

Sí, puedes incluir todos los subdirectorios.

Solo necesita pasar los argumentos siguientes a la función setup ():

 packages=find_packages() include_package_data=True 

Junto con esto, debe tener un archivo MANIFEST.in, con contenidos como

 recursive-include examples * 

Esto asegura que todos los archivos están incluidos recursivamente.

Si desea excluir ciertas extensiones específicamente, puede hacerlo especificando exclude array en el argumento find_packages() .

Ej: para excluir archivos .txt

 packages=find_packages(exclude=['.txt']) 

Puedes leer más sobre include_package_data aquí .

Y también aquí hay otro enlace que le dice cuándo no debe usar include_package_data

Siguiendo lo que dijo David Wolever, solo para hacerlo un poco más claro. Si desea incluir todo en una carpeta de subdirectorio, debe especificar explícitamente cada archivo en el archivo MANIFEST.in,

recursive-include examples/ *.py *.png *.sh etc …..

Sería bueno si el manifiesto solo entendiera examples/ e incluyera todo, pero bueno.

Ninguna de las respuestas sugeridas funcionó para mí en una situación similar.

Necesitaba hacer una distribución con mi paquete, que incluía varios submódulos en un subdirectorio, de modo que estos eran los archivos que necesitaba para ingresar a sdist :

 ipyexperiments/*py ipyexperiments/utils/*py 

y no importaba lo que intentara, los módulos de sdist no se incluían en sdist .

Lo que funcionó para mí es dejar la configuración predeterminada de config.py :

 # config.py from setuptools import setup, find_packages [...] setup( packages = find_packages(), [...] ) 

pero añadiendo a MANIFEST.in :

 # MANIFEST.in graft ipyexperiments 

y todo bajo ipyexperiments fue incluido.

También agregué a MANIFEST.in

 prune tests global-exclude *.py[co] 

para excluir todos los directorios de tests y cualquier *pyc y *.pyo no *.pyo cualquier lugar.