Python setuptools/easy_install不安装*.cfg文件和区域设置目录?

Python setuptools/easy_install不安装*.cfg文件和区域设置目录?,python,distribution,setuptools,easy-install,Python,Distribution,Setuptools,Easy Install,我对setuptools/easy_安装有点问题;也许有人能给我一个提示,问题的原因是什么: 为了方便地将我的一个python Web应用程序分发到服务器,我使用setuptools的sdist命令构建一个tar.gz文件,该文件被复制到服务器,并使用easy_install/path/To/file.tar.gz在本地安装 到目前为止,这似乎效果很好。我在MANIFEST.in文件中列出了如下内容: global-include */*.py */*.mo */*.po */*.pot */*

我对setuptools/easy_安装有点问题;也许有人能给我一个提示,问题的原因是什么:

为了方便地将我的一个python Web应用程序分发到服务器,我使用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安装locale和migrate.cfg文件

谢谢

以下是my 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=[],
    )
您需要使用安装程序的功能-您的文件不是代码,因此easy_install默认情况下不会安装它们,因为它不知道它们会去哪里

这样做的好处是,这些文件会自动添加到清单中——您不需要做任何魔术就可以自己将它们添加到清单中。通常,如果setup.py自动生成的清单不够用,那么自己添加它们并不能神奇地安装它们。

您需要使用安装程序的功能-您的文件不是代码,因此easy\u install默认情况下不会安装它们,因为它不知道它们会去哪里


这样做的好处是,这些文件会自动添加到清单中——您不需要做任何魔术就可以自己将它们添加到清单中。一般来说,如果setup.py自动生成的清单不够,那么自己添加它们并不能神奇地安装它们。

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

SOURCES.txt文件较旧,包含大多数文件的完整列表,这导致它们被正确绑定。 MANIFEST.in文件也是正确的,因此所有必需的文件实际上都如预期的那样位于.tar.gz存档中。主要问题是一些文件根本无法安装到目标机器上。 我必须将include_package_data=True添加到setup.py文件中。完成此操作后,按预期安装所有文件。
我必须对include_package_数据进行一些研究,以找出这种奇怪的行为是否在某个地方被记录下来。setuptools真是一团糟,尤其是文档。

我不想这么快回答我自己的问题,但经过一番尝试和错误,我发现了丢失文件的原因。事实上,原因不止一个:

SOURCES.txt文件较旧,包含大多数文件的完整列表,这导致它们被正确绑定。 MANIFEST.in文件也是正确的,因此所有必需的文件实际上都如预期的那样位于.tar.gz存档中。主要问题是一些文件根本无法安装到目标机器上。 我必须将include_package_data=True添加到setup.py文件中。完成此操作后,按预期安装所有文件。
我必须对include_package_数据进行一些研究,以找出这种奇怪的行为是否在某个地方被记录下来。setuptools真是一团糟,尤其是文档。

python中的整个包分发系统还有很多需要改进的地方。我的问题与你的问题类似,最终通过使用distutils而不是setuptools解决了,正如预期的那样,setuptools遵循include\u package\u data=True设置

使用distutils可以或多或少地在MANIFEST.in中保留所需的文件列表,并避免使用package_数据设置,因为我必须复制源列表;回退是因为find_包不可用。下面是我的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=[],
    )

python中的整个包分发系统还有很多需要改进的地方。我的问题与你的问题类似,最终通过使用distutils而不是setuptools解决了,正如预期的那样,setuptools遵循include\u package\u data=True设置

使用distutils可以或多或少地在MANIFEST.in中保留所需的文件列表,并避免使用package_数据设置,因为我必须复制源列表;回退是因为find_包不可用。下面是我的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文件的原因,它适用于大多数数据文件,如PNG和.mako模板。这很奇怪,看看我自己的答案。似乎缺少包含包数据。@badcat:请看我的评论-我认为一般来说,包含包数据不是您想要使用的功能-当您被迫显式包含数据文件时,我发现打包更合理
你想发送,而不是排除你不想发送的数据文件。这正是我的观点。因为我使用git,所以自动打包无论如何都不起作用。但真正奇怪的是,include_package_数据必须为True,这样即使是MANIFEST.in中手动定义的模式也会安装在目标计算机上。@badcat:MANIFEST.in只指定在运行sdist时源发行版中会出现什么-这与安装的内容无关。安装程序仍然需要知道在哪里安装这些文件。这就是为什么我使用MANIFEST.in文件,它适用于大多数数据文件,如PNG和.mako模板。这很奇怪,看看我自己的答案。似乎缺少包含包数据。@badcat:请看我的评论-我认为一般来说,包含包数据不是您想要使用的功能-当您被迫显式地包含您想要发送的数据文件,而不是排除您不想发送的数据文件时,我发现包包更加合理。这正是我的观点。因为我使用git,所以自动打包无论如何都不起作用。但真正奇怪的是,include_package_数据必须为True,这样即使是MANIFEST.in中手动定义的模式也会安装在目标计算机上。@badcat:MANIFEST.in只指定在运行sdist时源发行版中会出现什么-这与安装的内容无关。仍然需要告知安装程序在何处安装这些文件。这可能是您想要的,但可能不是..:-All include_package_data=True意味着setuptools应该在包目录中安装python不知道与包相关的文件。设置此选项意味着您现在必须格外小心,以确保MANIFEST.in排除您不希望包含的文件,并在人们添加文件时得到更新。这可能是您想要的,但可能不是..:-All include_package_data=True意味着setuptools应该在包目录中安装python不知道与包相关的文件。设置此选项意味着您现在必须格外小心,以确保MANIFEST.in排除您不希望包含的文件,并在人们添加文件时得到更新。