2012-06-07 4 views
15

Grundsätzlich mein Python-Paket ist Setup wie:Ist es möglich, Unterverzeichnisse mithilfe von Verzeichnissen (setup.py) als Teil von Paketdaten einzubinden?

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

Grundsätzlich mag ich nur verwenden:

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

weil mein Projekt immer Leute Beispiele hat das Hinzufügen und ich möchte es einfach sein, sie zur Liste von in meiner Anwendung. Ich kann es für jede Datei innerhalb von Beispielen arbeiten, aber nicht durch Unterverzeichnisse zurückflüchten. Ist das möglich?

Antwort

1

Sie müssen eine MANIFEST.in Datei dafür verwenden.

Ich glaube, Sie so etwas wie dies wollen werden:

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

verwenden sollte ich denke, man kann auch direkt Python-Funktionen in setup.py verwenden, um Dateien und Verzeichnisse zu finden, aber ich kann nicht ganz genau finden antworte im Moment. –

+1

Hrm, ich werde es versuchen müssen, wie ich es getan habe: rekursive-include-Beispiele * .py und nicht mit dem /. Ich habe gelesen, dass MANIFEST.in veraltet ist. Ich denke, ich muss vielleicht nur der Python-Funktionsaufrufmethode folgen. – xamox

+2

Oh ... Nun, wenn Sie herausfinden, wie man es mit Python macht, bitte hier posten. Ich würde gerne wissen. –

28

Ich glaube, was Sie suchen ist so etwas wie dies für Sie setup.py, die rekursiv alle Pakete in dem Projekt finden, auch sicher sein, und schließen Sie __init__.py Dateien in Unterverzeichnisse für jedes gewünschte Paket ein.

from setuptools import setup, find_packages 

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

Seien Sie vorsichtig, weil Sie versehentlich Testverzeichnisse usw. einfügen können, es sei denn, Sie schließen ausdrücklich = ... 'diese aus. – Arminius

1

Ja, können Sie alle Unterverzeichnisse enthalten.

Sie müssen nur die unten args Setup() übergeben Funktion:

packages=find_packages() 

include_package_data=True 

mit diesem Zusammen benötigen Sie eine MANIFEST.in Datei haben, mit Inhalten wie

recursive-include examples * 

Dadurch wird sichergestellt, Alle Dateien sind rekursiv enthalten.

Wenn Sie bestimmte Erweiterungen explizit ausschließen möchten, können Sie dies tun, indem Sie im Argument find_packages() das Argument exclude array angeben.

Ex: .txt Dateien ausschließen

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

Sie können mehr über include_package_datahere lesen.

Und auch here ist ein weiterer Link, der Ihnen sagt, wenn Sie nicht include_package_data

Verwandte Themen