2016-02-01 3 views
5

я нашел несколько источников (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/), которые свидетельствуют о том, что способ распространения файлов данные в пакете Python является использование Setuptools include_package_data опции игрового и MANIFEST.in. Файлы в моем пакете, таким образом выглядеть,Где setup.py устанавливает файлы данных внутри virtualenv?

setup.py

setup( # ... include_package_data = True, # ... с остальной частью файла (надеюсь, не имеет значения) Опущенные.

MANIFEST.IN

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

Когда я бегу setup.py install или использовать пипс в virtualenv, я в конечном итоге с источником Python сами файлы, но без testdata/, где я могу найти его. Я думаю, что это была ошибка в моей упаковке, за исключением того, что когда я хватаю еще один пакет с похожим макетом, я тоже не могу найти файлы данных. Если я клонирую репозиторий для примера пакета https://github.com/ionelmc/python-nameless и установлю его с помощью setup.py install, пакет устанавливается в каталог lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/. Однако я не могу найти ни одного из файлов данных или тестов в любом месте виртуального сервера. Где они должны были закончиться? Как это должно работать?

Моей мотивацией для запроса этого вопроса является то, что другой участник проекта хочет, чтобы тесты, требующие файлов данных, выполнялись с помощью установки pip. Это правильный подход в первую очередь?

+0

Используйте 'pkg_resources' чтобы открыть файлы данных. См. Мой [ответ] (http://stackoverflow.com/a/34788912/3626079) для аналогичного вопроса. – ziky

ответ

0

Я понимаю, что вы должны просто

include testdata

вместо graft ИНГ это - быть честным, я на самом деле не уверен, что graft делает.

Кроме того, я не считаю, что это обязательно указание include_package_data = True на всех

+0

'include' включает файлы, соответствующие шаблону, а не каталоги. Насколько мне известно, это объясняется только в устаревшей документации: https://docs.python.org/3/distutils/commandref.html. (Если это объясняется в документации, не имеющей аналогов, я понятия не имею, где.) 'Graft' включает целые каталоги. Как в моем файле MANIFEST.in, так и в примере пакета 'include' используется для отдельных файлов, и я не могу найти эти файлы в virtualenv. Я также пробовал 'recursive-include' на' testdata/', и это тоже не работает. – ceridwen

+0

Вчера я столкнулся с аналогичной проблемой. Раньше я вручную хранил КОПИРОВАНИЕ и ЛИЦЕНЗИЮ в '/ etc/nepi', но это ломалось под virtualenv. Теперь (см. [My git repo здесь] (http://git.onelab.eu/?p=nepi.git;a=tree)) все работает нормально. Если вы не видите каких-либо файлов, я подозреваю, что что-то еще не так. Также я видел примеры 'include', которые используются с каталогом, но не имеют доказательств того, что он будет работать. Я согласен с тем, что документация по этому вопросу не совсем ясна :) – parmentelat