2010-06-03 15 views
6

Estoy escribiendo un archivo setup.py para un proyecto de Python para que pueda distribuirlo. El objetivo es crear eventualmente un archivo .egg, pero estoy tratando de hacerlo funcionar primero con distutils y un .zip regular.¿Por qué no puedo incluir estos archivos de datos en una distribución de Python usando distutils?

Este es un proyecto de Eclipse pydev y mi estructura de archivos es algo como esto:

ProjectName 
    src 
     somePackage 
     module1.py 
     module2.py 
     ... 
    config 
     propsFile1.ini 
     propsFile2.ini 
     propsFile3.ini 
    setup.py 

Aquí está mi código setup.py hasta ahora:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'], 
     data_files = [('config', ['..\config\propsFile1.ini', 
           '..\config\propsFile2.ini', 
           '..\config\propsFile3.ini'])] 
    ) 

Cuando ejecuto esto (con sdist como un parámetro de línea de comando), se genera un archivo .zip con todos los archivos de Python, pero los archivos de configuración no están incluidos. Pensé que este código:

data_files = [('config', ['..\config\propsFile1.ini', 
            '..\config\propsFile2.ini', 
            '..\config\propsFile3.ini'])] 

indica que esos 3 archivos de configuración especificados deben copiarse en un directorio "config" en la distribución postal. ¿Por qué este código no está logrando nada? ¿Qué estoy haciendo mal?

(también he intentado jugar con las rutas de los archivos de configuración ... Pero nada parece ayudar. Would Python lanzar un error o advertencia si la ruta era incorrecta/no se encontró archivo?)

Respuesta

1

Finalmente conseguí que esto funcionara moviendo todo el directorio de configuración a la carpeta src. Esto debe significar que mis caminos están apagados ... pero como no podía encontrar una manera de hacer una copia de seguridad de un directorio (".. \" no hizo la diferencia), me voy a quedar con esta solución por ahora.

6

crear un archivo MANIFEST.in así:

include config\* 

(EDITAR) Mira aquí para obtener más información: http://docs.python.org/distutils/sourcedist.html#specifying-the-files-to-distribute

+0

Gracias. Aparece el siguiente error: 'advertencia: no se encontraron archivos que coincidan con 'config \ *''. He intentado cambiar a .. \ config \ * pero eso tampoco ayuda ... ¿Alguna idea? – froadie

+0

Hay un espacio entre '\' y '*'. Intenta eliminar eso? De lo contrario, intenta usar la barra diagonal. He usado la barra diagonal, pero como parecías haber usado la barra invertida, reemplacé '/' con '\' aquí. Sin embargo, he encontrado que usar/NO causa realmente ningún problema en Windows. Si nada funciona, simplemente comprobar si está en el camino correcto hardcoding nombres de los archivos en él, como: incluyen config/propsFile1.ini incluyen config/propsFile2.ini # etc ... – Umang

+0

El espacio era solamente debido al formato SO - cuando los puse juntos escondió la barra por alguna razón. Cambiar a barra diagonal no hace la diferencia ... Python parece volver a convertirlo automáticamente, el mismo mensaje de error. Obtenga el mismo error en los archivos individuales ... :(¿Alguna pista de lo que está mal? ¿Es un problema de ruta? – froadie

0

supongo que tiene que escapar de las barras invertidas en el nombres de archivos; Por ejemplo, en lugar de '..\config\whatever', escriba '..\\config\\whatever', o use la sintaxis de la cadena sin procesar: r'..\config\whatever'.

+0

Lo intenté (esa es una de las cosas que quise decir con "También traté de jugar con las rutas de los archivos de configuración") y no pareció marcar la diferencia ... – froadie

+0

Distutils siempre usa barras diagonales. –

Cuestiones relacionadas