setuptools / easy_install не устанавливает файлы * .cfg и каталоги локалей? - PullRequest
1 голос
/ 24 февраля 2012

У меня небольшая проблема с setuptools / easy_install;Может быть, кто-то может дать мне подсказку, что может быть причиной проблемы:

Чтобы легко распространять один из моих веб-приложений на Python на серверы, я использую команду sdist setuptools для создания скопированного файла tar.gzна серверы и локально установлены с использованием easy_install /path/to/file.tar.gz.

Пока что это работает отлично.Я перечислил все в файле MANIFEST.in следующим образом:

global-include */*.py */*.mo */*.po */*.pot */*.css */*.js */*.png */*.jpg */*.ico */*.woff */*.gif */*.mako */*.cfg

И полученный файл tar.gz действительно содержит все нужные мне файлы.

Странно, как толькопоскольку easy_install пытается фактически установить его в удаленной системе.По какой-то причине каталог с именем locales и файл конфигурации с именем migrate.cfg не будут установлены.Это странно, и я не могу найти никаких документов по этому поводу, но я думаю, что это какая-то функция автоматического игнорирования easy_install?

Есть ли что-то подобное?И если да, то как мне получить easy_install для установки файлов locales и migrate.cfg?

Спасибо!

Для справки вот содержимое моего setup.py:

from setuptools import setup, find_packages


requires = ['flup', 'pyramid', 'WebError', 'wtforms', 'webhelpers', 'pil', 'apns', \
            'pyramid_beaker', 'sqlalchemy', 'poster', 'boto', 'pypdf', 'sqlalchemy_migrate', \
            'Babel']

version_number = execfile('pubserverng/version.py')

setup(
    author='Bastian',
    author_email='test@domain.com',
    url='http://domain.de/',
    name = "mywebapp",
    install_requires = requires,
    version = __version__,
    packages = find_packages(),
    zip_safe=False,
    entry_points = {
        'paste.app_factory': [
            'pubserverng=pubserverng:main'
        ]
    },

    namespace_packages = ['pubserverng'],

    message_extractors = { 'pubserverng': [
            ('**.py', 'python', None),
            ('templates/**.html', 'mako', None),
            ('templates/**.mako', 'mako', None),
            ('static/**', 'ignore', None),
            ('migrations/**', 'ignore', None), 
        ]
    },


)

Ответы [ 3 ]

2 голосов
/ 22 августа 2012

Вся система распространения пакетов в python оставляет желать лучшего. Мои проблемы были похожи на ваши и в конечном итоге были решены с помощью distutils (а не setuptools), который соответствовал настройке include_package_data = True, как и ожидалось.

Использование distutils позволило мне более или менее сохранить требуемый список файлов в MANIFEST.in и избежать использования параметра package_data, где мне пришлось бы дублировать список источников; откат find_packages недоступен. Ниже мой setup.py:

from distutils.core import setup
package = __import__('simplemenu')

setup(name='django-simplemenu',
    version=package.get_version(),
    url='http://github.com/danielsokolowski/django-simplemenu',
    license='BSD',
    description=package.__doc__.strip(),
    author='Alex Vasi <eee@someuser.com>, Justin Steward <justin+github@justinsteward.com>, Daniel Sokolowski <unemelpmis-ognajd@danols.com>',
    author_email='unemelpmis-ognajd@danols.com',
    include_package_data=True, # this will read MANIFEST.in during install phase
    packages=[
        'simplemenu',
        'simplemenu.migrations',
        'simplemenu.templatetags',
    ],
    # below is no longer needed as we are utilizing MANIFEST.in with include_package_data setting
    #package_data={'simplemenu': ['locale/en/LC_MESSAGES/*', 
    #                             'locale/ru/LC_MESSAGES/*']
    #              },
    scripts=[],
    requires=[],
    )

А вот файл MANIFEST.in:

    include LICENSE
    include README.rst
    recursive-include simplemenu *.py
    recursive-include simplemenu/locale *
    prune simplemenu/migrations
1 голос
/ 24 февраля 2012

Я не хочу отвечать на свой вопрос так быстро, но после некоторых проб и ошибок я выяснил, в чем причина пропавших файлов.На самом деле это было более чем одной причиной:

  • Файл SOURCES.txt был старше и содержал полный список большинства файлов, что привело к их правильной связке.
  • Файл MANIFEST.in также был корректным, поэтому все необходимые файлы были в архиве .tar.gz, как и ожидалось.Основная проблема заключалась в том, что некоторые файлы просто не могли быть установлены на целевой машине.
  • Мне пришлось добавить include_package_data = True, в мой файл setup.py.После этого все файлы будут установлены, как и ожидалось.

Мне придется провести небольшое исследование в include_package_data, чтобы выяснить, задокументировано ли где-нибудь такое странное поведение.setuptools - настоящий беспорядок, особенно документация.

1 голос
/ 24 февраля 2012

Вам необходимо использовать data_files функциональность setup - ваши файлы не являются кодом, поэтому easy_install не будет устанавливать их по умолчанию (он не знает, куда они идут ).

Плюсом этого является то, что эти файлы добавляются в MANIFEST автоматически - вам не нужно творить магию, чтобы получить их там самостоятельно. (В общем, если MANIFEST, автоматически сгенерированный setup.py, недостаточен, добавление их самостоятельно не приведет к волшебной установке.)

...