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")
все отлично работает