setuptools / easy_install不安装* .cfg文件和语言环境目录?

时间:2012-02-24 12:37:50

标签: python distribution setuptools easy-install

我的setuptools / easy_install有点问题;也许有人可以给我一个暗示可能是问题的原因:

为了方便地将我的一个python webapps分发到服务器,我使用setuptools'sdist命令构建一个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安装localesmigrate.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 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您需要使用setup的{​​{3}}功能 - 您的文件不是代码,因此默认情况下easy_install不会安装它们(它不知道它们去了哪里)。

这样做的好处是这些文件会自动添加到MANIFEST中 - 您不需要做任何魔术就可以自己将它们放到那里。 (一般情况下,如果由setup.py自动生成的MANIFEST是不够的,那么自己添加它们并不会神奇地安装它们。)

答案 2 :(得分:1)

我不想快速回答我自己的问题,但经过一些试验和错误后,我发现丢失文件背后的原因是什么。事实上,这不仅仅是一个原因:

  • SOURCES.txt文件较旧,包含大多数文件的完整列表,这导致它们被正确捆绑。
  • MANIFEST.in文件也是正确的,因此所有必需的文件实际上都在.tar.gz存档中。主要问题是一些文件根本不会安装在目标机器上。
  • 我必须将include_package_data = True,添加到我的setup.py文件中。完成后按预期安装所有文件。

我必须对include_package_data进行一些研究,以确定是否在某处记录了这种奇怪的行为。 setuptools是一个真正的混乱 - 特别是文档。