2016-02-01 17 views
5

Ich habe mehrere Quellen gefunden (https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute, http://blog.ionelmc.ro/2014/05/25/python-packaging/, http://blog.ionelmc.ro/2014/06/25/python-packaging-pitfalls/), die darauf hinweist, dass die Art und Weise Datendateien in einem Python-Paket zu verteilen ist Setuptool der include_package_data Option und ein MANIFEST.in zu verwenden. Die Dateien in meinem Paket aussehen so wie,Wo installiert setup.py Datendateien in einem virtualenv?

setup.py

setup( # ... include_package_data = True, # ... mit dem Rest der Datei (hoffentlich irrelevant) elided.

MANIFEST.IN

graft testdata include ChangeLog include README.rst include COPYING include COPYING.LESSER include tox.ini

Wenn ich laufe setup.py install oder Pip in einem virtualenv verwenden, habe ich am Ende mit dem Python-Source-Dateien selbst, aber ohne testdata/ überall kann ich es finden. Ich würde denken, dass dies ein Fehler in meiner Verpackung war, außer dass ich, wenn ich ein anderes Paket mit einem ähnlichen Layout ergreife, die Datendateien auch nicht finden kann. Wenn ich das Repository für das Beispielpaket https://github.com/ionelmc/python-nameless klone und es unter Verwendung von setup.py install installiere, wird das Paket im Verzeichnis lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/ installiert. Allerdings kann ich keine der Dateien oder Tests irgendwo im virtualenv finden. Wo sollen sie enden? Wie soll das funktionieren?

Meine Motivation für diese Frage ist, dass ein anderer Mitwirkender für ein Projekt möchte, dass die Tests, die die Datendateien erfordern, von einer Pip-Installation ausgeführt werden. Ist das überhaupt der richtige Ansatz?

+0

Verwenden 'pkg_resources' angeben benötigt, um Ihre Datendateien zu entdecken. Siehe meine [Antwort] (http://stackoverflow.com/a/34788912/3626079) für ähnliche Frage. – ziky

Antwort

0

Mein Verständnis ist, dass Sie sollten nur

include testdata

statt graft es ing - um ehrlich zu sein, ich bin eigentlich nicht sicher, was graft tut.

Auch glaube ich nicht, es include_package_data = True bei allen

+0

'include' enthält Dateien, die dem Muster entsprechen, keine Verzeichnisse. Soweit ich weiß, wird dies nur in der Legacy-Dokumentation erklärt: https://docs.python.org/3/distutils/commandref.html. (Wenn es in der nicht-traditionellen Dokumentation erklärt wird, habe ich keine Ahnung wo.) 'Graft' enthält ganze Verzeichnisse. Sowohl in meiner MANIFEST.in als auch im Beispielpaket wird 'include' für einzelne Dateien verwendet, und ich kann diese Dateien auch nicht in der virtualenv finden. Ich habe 'recursive-include' auch auf' testdata/'versucht, und das funktioniert auch nicht. – ceridwen

+0

Ich hatte gestern ein ähnliches Problem. Vorher habe ich manuell COPYING und LICENSE in '/ etc/nepi' gespeichert, aber das war unter virtualenv. Jetzt (siehe [mein Git Repo hier] (http://git.onelab.eu/?p=nepi.git;a=tree)) läuft es gut. Wenn Sie keine der Dateien sehen, vermute ich, dass etwas anderes schief läuft. Ich habe auch Beispiele von 'include' gesehen, die mit einem Verzeichnis verwendet werden, aber keine Beweise haben, dass es funktionieren würde. Ich stimme zu, dass die Dokumentation zu diesem Thema nicht genau klar ist :) – parmentelat

Verwandte Themen