我的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安装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), ] }, )
答案 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是一个真正的混乱 - 特别是文档。