2010-06-03 9 views
6

Sto scrivendo un file setup.py per un progetto Python in modo che possa distribuirlo. L'obiettivo è quello di creare un file .egg, ma sto cercando di farlo funzionare prima con distutils e un normale .zip.Perché non posso includere questi file di dati in una distribuzione Python usando distutils?

Questo è un progetto Eclipse pydev e la mia struttura dei file è qualcosa di simile:

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

Ecco il mio codice setup.py finora:

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'])] 
    ) 

Quando eseguo questo (con sdist come un parametro della riga di comando), un file .zip viene generato con tutti i file python, ma i file di configurazione non sono inclusi. Ho pensato che questo codice:

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

indica che quei 3 file di configurazione specificati devono essere copiati in una directory "config" nella distribuzione zip. Perché questo codice non sta ottenendo nulla? Che cosa sto facendo di sbagliato?

(ho anche provato a giocare con i percorsi dei file di configurazione ... Ma nulla sembra aiutare. Sarebbe Python genera un errore o un avviso se il percorso non era corretto/file non è stato trovato?)

risposta

1

Ho finalmente funzionato spostando l'intera directory di configurazione nella cartella src. Questo deve significare che i miei percorsi sono fuori ... ma dato che non riesco a trovare un modo per eseguire il backup di una directory (".. \" non ha fatto la differenza), ho intenzione di rimanere con questa soluzione per adesso.

6

creare un file MANIFEST.in come questo:

include config\* 

(EDIT) Guardate qui per maggiori informazioni: http://docs.python.org/distutils/sourcedist.html#specifying-the-files-to-distribute

+0

Grazie. Ottengo il seguente errore: 'avviso: nessun file trovato corrispondente a 'config \ *''. Ho provato a cambiare .. \ config \ * ma questo non aiuta neanche ... qualche idea? – froadie

+0

C'è uno spazio tra '\' e '*'. Prova a rimuoverlo? In caso contrario, provare a utilizzare la barra diretta. Ho usato la barra diretta, ma poiché sembravi aver usato il backslash, ho sostituito '/' con '\' qui. Tuttavia, ho scoperto che l'utilizzo/NON causa realmente alcun problema su Windows. Se non funziona, basta controllare se si è sulla strada giusta per hardcoding i nomi dei file in esso, come: includono config/propsFile1.ini includono config/propsFile2.ini # ecc ... – Umang

+0

Lo spazio era solo a causa della formattazione SO, quando li ho riuniti nascondeva la barra per qualche motivo. Cambiare la barra in avanti non fa la differenza ... Python sembra convertirlo automaticamente, lo stesso messaggio di errore. Ottieni lo stesso errore su singoli file ...: (Qualche indizio, cosa c'è che non va? È un problema di percorso? – froadie

0

Credo che devi per sfuggire alle backslash nel i nomi dei file; ad esempio, anziché '..\config\whatever', scrivi '..\\config\\whatever' o utilizza la sintassi della stringa non elaborata: r'..\config\whatever'.

+0

L'ho provato (è una delle cose che intendevo dire "Ho anche provato a giocare con i percorsi dei file di configurazione") e non sembrava fare la differenza ... – froadie

+0

Distutils usa sempre barre inverse. –