2012-06-07 10 views
15

Fondamentalmente il mio pacchetto python è configurato come:È possibile includere sottodirectory usando dist utils (setup.py) come parte dei dati del pacchetto?

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

Fondamentalmente voglio utilizzare solo:

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

perché il mio progetto ha sempre persone che aggiungono esempi e voglio che sia facile elencarli da all'interno della mia applicazione. Posso farlo funzionare per qualsiasi FILE con degli esempi, ma non reprimerlo attraverso le sottodirectory. È possibile?

risposta

1

Dovrai utilizzare un file MANIFEST.in per quello.

credo si vorrà qualcosa di simile:

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

Penso che si può anche utilizzare direttamente le funzioni Python in setup.py per trovare file e directory, ma io non riesco a trovare l'esatto risposta al momento. –

+1

Hrm, dovrò fare un tentativo come ho fatto: esempi di ricorsiva-inclusione * .py e non usare il /. Ho letto che MANIFEST.in è stato deprecato però. Penso che dovrei semplicemente seguire il metodo di chiamata della funzione python. – xamox

+2

Oh ... Beh, se capisci come farlo con Python, per favore pubblica qui. Mi piacerebbe saperlo –

28

Credo che ciò che stai cercando è qualcosa di simile per te setup.py, che ricorsivamente trovare tutti i pacchetti nel progetto, essere anche sicuro e includere i file __init__.py in sottodirectory per ogni pacchetto che si desidera.

from setuptools import setup, find_packages 

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

Fai attenzione qui, perché potresti accidentalmente includere le directory di test, ecc. A meno che tu non esprima esplicitamente "exclude = ...". – Arminius

1

Sì, è possibile includere tutte le sottodirectory.

Hai solo bisogno di passare i args di seguito per l'installazione) la funzione (:

packages=find_packages() 

include_package_data=True 

Insieme a questo è necessario disporre di un file MANIFEST.in, con contenuti come

recursive-include examples * 

Questo assicura tutti i file sono inclusi ricorsivamente.

Se si desidera escludere determinate estensioni in modo specifico, è possibile farlo specificando l'array di esclusione nell'argomento find_packages().

Es: per escludere i file .txt

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

Si può leggere di più su include_package_datahere.

Ed anche here è un altro link che ti dice quando non si dovrebbe usare include_package_data