2012-02-24 6 views
1

私はsetuptools/easy_installに少し問題があります。おそらく誰かが私に問題の原因であるかもしれないヒントを与えるかもしれません:setuptools/easy_installは* .cfgファイルとロケールディレクトリをインストールしませんか?

サーバに私のpython webappsを簡単に配布するにはsetuptoolsのsdistコマンドを使ってサーバとローカルにコピーされるtar.gzファイルを構築しますeasy_install /path/to/file.tar.gzを使用してインストールします。

これまでのところこれはうまくいくようです。

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

、そして得られたtar.gzファイル確かに私は必要なすべてのファイルが含まれていない:私はこのようなMANIFEST.inファイル内のすべてを列挙されています。

easy_installが実際にリモートシステムにインストールしようとするとすぐに気が変わります。なんらかの理由でlocalesというディレクトリとという設定ファイルがインストールされません。これは奇妙で、私はこれについてのドキュメントを見つけることができませんが、easy_installの自動無視機能がいくつかありますか?

そんなことがありますか?もしそうなら、どうすればlocalesmigrate.cfgファイルをインストールするのにeasy_installを入手できますか?

ありがとうございます!参考のため

ここでは私の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='[email protected]', 
    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), 
     ] 
    }, 


) 

答えて

1

私は自分の質問に迅速に答えることを嫌いですが、不足しているファイルの背後にある理由を見つけました。

  • SOURCES.txtファイルが古いだったし、それらが正しく同梱されているが生じ最もファイルの完全なリストを、含ま:実際には複数の理由でした。
  • MANIFEST.inファイルも正しいので、必要なファイルはすべて実際には.tar.gzアーカイブに入っていました。主な問題は、いくつかのファイルが単にターゲットマシンにインストールされないということでした。
  • 私はinclude_package_data = True,をsetup.pyファイルに追加しなければならなかった。その後、すべてのファイルが期待どおりにインストールされます。

include_package_dataにいくつかの調査を入れて、この奇妙な動作がどこかに記録されているかどうかを調べる必要があります。 setuptoolsは本当に混乱しています。特にドキュメントです。

+0

これはあなたが望むものかもしれないが、それはそうではないかもしれない:-) 'include_package_data = True'は、setuptoolsがpythonによって知られていないパッケージディレクトリにファイルをインストールすべきことを意味するパッケージに関連しています。このオプションを設定すると、MANIFEST.inがインクルードしたくないファイルを除外するように注意する必要があります(人がファイルを追加したときに更新されます)。 –

1

あなたはsetupdata_files機能を使用する必要があります - あなたのファイルは、コードではありませんので、easy_installはそれらをデフォルトでインストールされません(それはdoesnのどこに行くのか分からない)。

これは、これらのファイルが自動的にMANIFESTに追加されるということです。あなた自身で取得するために魔法を使う必要はありません。 (一般にsetup.pyによって自動的に生成されたマニフェストが十分でない場合は、それらを自分で追加することは魔法のようにインストールされません)

+0

私はMANIFEST.inファイルを使用する理由だし、それはPNGファイルと.makoのように、ほとんどのデータファイルのために働きますテンプレート。これは奇妙です。 – BastiBen

+0

私自身の答えを見てください。 include_package_dataが見つからなかったようです。 – BastiBen

+0

@badcat:私のコメントを参照してください - 私は一般的に 'include_package_data'はあなたが使いたい機能ではないと主張します - あなたが明示的に出荷するデータファイルを含めることを余儀なくされるとき、出荷したくないデータファイルを除外します。 –

2

Pythonのパッケージ配布システム全体は、多くのことを望んでいます。私の問題はあなたのものと似ていて、最終的にはinclude_package_data = Trueの設定を期待して(setuptoolsではなく)を使用して解決しました。

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 <[email protected]>, Justin Steward <[email protected]>, Daniel Sokolowski <[email protected]>', 
    author_email='[email protected]', 
    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 
関連する問題