2012-06-07 10 views
15

Básicamente mi paquete python está configurado como:¿Es posible incluir subdirectorios utilizando dist utils (setup.py) como parte de los datos del paquete?

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

Básicamente Quiero usar simplemente:

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

porque mi proyecto siempre tiene la gente añadiendo ejemplos y yo quiero que sea fácil hacer una lista de ellos a partir dentro de mi aplicación. Puedo hacer que funcione para cualquier ARCHIVO dentro de ejemplos, pero no para volver a lanzar una maldición a través de subdirectorios. es posible?

Respuesta

1

Deberá usar un archivo MANIFEST.in para eso.

creo que querrá algo como esto:

 
$ cat MANIFEST.in 
recursive-include examples/ *.py 
+0

Creo que también se puede utilizar directamente las funciones de Python en setup.py para buscar archivos y directorios, pero no acabo de encontrar la exacta responde en este momento. –

+1

Hrm, tendré que probarlo como lo hice: recursive-include examples * .py y no usé /. Leí que MANIFEST.in está en desuso. Creo que debo seguir el método de llamada a la función python. – xamox

+2

Oh ... Bueno, si descubres cómo hacerlo con Python, publica aquí. Me gustaría saber. –

28

Creo que lo que estás buscando es algo como esto para usted setup.py, que forma recursiva encontrar ningún paquete en el proyecto, también asegúrese e incluya los archivos __init__.py en los subdirectorios para cada paquete que desee.

from setuptools import setup, find_packages 

setup(name='MySoftware', 
    packages=find_packages() 
} 
+0

Tenga cuidado aquí, porque puede incluir accidentalmente directorios de prueba, etc. a menos que explícitamente 'exclude = ...' estos. – Arminius

1

Sí, puede incluir todos los archivos adjuntos.

sólo tiene que pasar los argumentos a continuación para configurar) función (:

packages=find_packages() 

include_package_data=True 

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

recursive-include examples * 

Esto asegura todos los archivos son recursivamente incluidos.

Si desea excluir ciertas extensiones específicamente, puede hacerlo especificando matriz de exclusión en el argumento find_packages().

Ej: Para excluir archivos .txt

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

Puede leer más sobre include_package_datahere.

Y también here es otro eslabón que le indica cuándo no se debe utilizar include_package_data

Cuestiones relacionadas