2011-11-15 9 views
3

私は開発環境を管理するためにpip & virtualenvを使っているDjangoアプリケーションを書いています。Python eggでデータファイルを配布/アクセスする方法は?

pkgmeの1つは、 "バックエンド"である多くのデータファイルが付属しており、その設定ファイルはdata_files=$FOOpackage_dataではなく)で設定されています。

pkgme​​がバックエンドを検索すると、os.path.join(sys.prefix, "share", "pkgme", "backends")が検索されます。これはpkgme​​が正常にインストールされたときにうまく動作し、documentationと一致するようですが、pkgme​​が卵としてインストールされている場合はではありません。は動作しません。

データファイルは、$VIRTUAL_ENV/shareではなく$VIRTUAL_ENV/lib/python2.7/site-packages/pkgme-0.1-py2.7.egg/shareの下にインストールされます。二つの質問を私に残し

  1. 私は関係なく、我々は卵のインストールや従来のシステムのインストールを使用しているかどうかのデータファイルを見つけるために、上記のos.path.join以外のものを使用する必要がありますか?もしそうなら、何?
  2. データファイルを卵の中でより容易に利用できるように、データファイルを別々に配布すべきですか?

私はpkgutil.get_dataについて知っていますが、むしろそれを使用しないことに注意してください。私はこれらのデータファイルのの内容に興味がありません、代わりにの位置を知りたいので、私はそれらを実行できます。

私の現在の計画はこれを行うことです。

  • 使用package_data代わりdata_files
  • 変更pkgme.__file__に対するバックエンドを探すためにpkgme​​ではなくsys.prefix

答えて

1

私は次のことをやってしまった:

  • 、独自含まバックエンドを見つけるためにpkg_resources.resource_filename()を使用するpkgme​​を変更するには、Pythonで書かれたすべてのバックエンドは、独自の場所を公開するために使用できるエントリポイントを追加しましたバックエンドのスクリプトは
  • はdiffがfoをすることができPythonの

を使用したくないバックエンド用sys.prefixベースのチェックを保ちましたここに:http://bazaar.launchpad.net/~pkgme-committers/pkgme/trunk/revision/86

1

のあなたの現在の計画は、本質的に正しいですかいずれにせよ、実行可能な選択肢である。

setuptoolsが卵を作成すると、卵のコードが__file__を使用するかどうかを確認し、卵が圧縮形式でインストール可能でないとマークします。このようにして、eggがeasy_installによってインストールされると、ファイルは.eggファイルのままではなく、.egg/ディレクトリに展開されます。

あなたは、圧縮/ドロップインのインストール(すなわち、それを「インストール」することなく、ディレクトリ内の卵をダンプ)をサポートする場合は、あなたの代わりに__file__pkg_resources.resource_filename()(docs here) APIを使用する必要がありますが、その後、あなたのパッケージがされますsetuptoolsに依存するか、またはそのAPIを利用できるように配布します。

+0

ありがとうPJE。 '__file__'チェックについて知っておくとよいでしょう。私はこの質問で提案したアプローチと同様のアプローチを取ったが、いくつかのバックエンドを処理するためにエントリポイントを追加使用していた。 – jml

関連する問題