принудительная распаковка определенных каталогов с яйцами - PullRequest
5 голосов
/ 19 ноября 2009

У меня есть дистрибутив яйца PyQt-приложения, которое я создаю сам, и оно содержит сгенерированную sphinx документацию. Когда я вызываю файл справки из приложения, он открывает файл sphinx index.html в окне QtWebKit.QWebView. По-видимому, только файл index.html извлекается из яйца в директорию яйца ОС (например, [..] \ Application Data \ Python-Eggs \ под Windows).

Это приводит к повреждению CSS, неработающим изображениям и неработающим ссылкам, потому что эти другие файлы не распаковываются; они присутствуют в файле egg, но отсутствуют в каталоге egg.

Я что-то здесь упускаю? Есть ли способ немедленно распаковать все html, css, файл изображения?

Ответы [ 3 ]

4 голосов
/ 29 января 2010

Я вижу, что вы уже нашли другой способ сделать это, но для дальнейшего использования вот необязательный способ сделать это автоматически, из документации на http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction [выделение добавлено]:

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

Итак, в данном случае вам нужно иметь:

eager_resources=['doc/sphinx/build/html', 'doc/sphinx/build/html/index.html']

в вашем файле setup.py, что приведет к рекурсивному извлечению каталога html при запросе index.html (при условии, что в вашем примере 'doc' является пакетом верхнего уровня).

(Подробнее о ключевом слове eager_resources можно узнать в документации по адресу http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywords)

2 голосов
/ 20 ноября 2009
def get_help_url(self):
    from pkg_resources import resource_filename
    from doc import sphinx
    import os
    from PyQt4.QtCore import QUrl
    html_path = resource_filename(sphinx.__name__, os.path.join('build', 'html'))

    return QUrl(os.path.join(html_path, 'index.html'))

вместо

    html = resource_filename(sphinx.__name__, os.path.join('build', 'html', 'index.html'))

    return QUrl(html)

сделал трюк

1 голос
/ 19 ноября 2009

Вероятная причина: не все файлы включены в яйцо.

  • Проверьте это, разархивировав файл .egg (вам может потребоваться переименовать его в файл .zip для этого в Windows). Проверьте все ли содержимое.

  • Посмотрите, как вы сделали яйцо. Используете ли вы файл MANIFEST.in, чтобы сообщить setuptools, какие файлы включить? Если нет, то вы, вероятно, доверяете автоматическому включению файлов подрывной работы в setuptools. Все файлы Subversion автоматически попадают в яйцо, файлы Python - к, остальные - нет.

  • Документация sphinx, вероятно, сгенерирована, поэтому она не находится в subversion, поэтому она не включается автоматически.

Два решения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...