pkg_resources.resource_filename не извлекает файлы

Я хочу упаковать проект, который содержит (и использует) шаблоны HTML-файлов и распространять его как яйцо. Поскольку я использую tornadoweb, для которого требуются пути к файлам, указывающие на файлы html, я не могу получить доступ к ресурсам через поток, и мне действительно нужно извлечь файлы html, когда моя программа работает.

Я смотрю на setuptools и в соответствии с resource_filename документы (жирный шрифт мой):

Иногда для доступа к ресурсу в виде строки или потока недостаточно, и требуется настоящее имя файла файловой системы. В таких случаях вы можете использовать этот метод (или функцию уровня модуля), чтобы получить имя файла для ресурса. Если ресурс находится в архивном дистрибутиве (например, в архиве с яйцом), он будет извлечен в каталог кэша, и будет возвращено имя файла в кэше. Если указанный ресурс является каталогом, то все ресурсы в этом каталоге (включая подкаталоги) также извлекаются. Если названный ресурс является расширением C или "энергичным ресурсом" (см. setuptools документация для деталей), тогда все расширения C и активные ресурсы извлекаются одновременно.

Который кажется именно то, что мне нужно. Однако это не то, что происходит на моей машине. мой setup.py содержит следующую строку:

data_files = [('html', ['html/index.html'])]

А также index.html на самом деле включен в мой файл яйца. Когда я бегу python3 setup.py install Мой проект устанавливается в виде одного файла на молнии. К сожалению, когда моя программа выполняет следующую строку:

html_path = resource_filename(__name__, "html")

Я получаю следующее возвращаемое значение:

/usr/local/lib/python3.2/dist-packages/myproj-0.1-py3.2.egg/EGG-INFO/scripts/html/

Проблема в том, что myproj-0.1-py3.2.egg на самом деле это ZIP-файл, так что это не правильный путь.

Странно, потому что если я позвоню pkg_resources.get_cache_path(‘myproj’) Я получаю следующий путь назад:

/root/.python-eggs/myproj-tmp

Но там ничего не извлекается (да, я запускаю программу от имени пользователя root, но я просто тестирую ее).

Любая идея, почему мой html каталог не распакован?

1 ответ

Решение

Нашел причину проблемы. Как заметил @erykson, я использовал неправильный каталог.

После замены

html_path = resource_filename(__name__, "html")

с

html_path = resource_filename(Requirement.parse("myproj"), "html")

все отлично работает

Другие вопросы по тегам