2009-11-13 12 views
9

私はいくつかの.txt依存関係を持つPythonの卵を開発しています(これらは卵自体でファイルを生成するためのテンプレートです)、私はその依存関係をsite-packagesにコピーするのに苦労しています。 setup.py install。私のパッケージのdistribute documentation ...setuptools/distributeでリソースをパッケージ化する

ファイルシステムによると:

from pkg_resources import resource_string 
tpl = resource_string(__name__, 'templates/file1.txt') 
:私のパッケージ内

setup(
    [...] 
    eager_resources = ['templates/file1.txt', 'templates/file2.txt'] 
) 

:setup.pyで

setup.py 
package 
|--- __init__.py 
|--- main.py 
|--- binary (calls main.py with pkg_resources.load_entry_point) 
|--- templates 
    |--file1.txt 
    |--file2.txt 

...この構成とファイルシステムの組み合わせは、file1.txtfile2.txtpkg_resources.resource_stringで利用可能になるはずです。残念ながら、彼らはsetup.py installの間にsite-packagesにコピーされていません。私は何が欠けていますか?

ありがとうございます!

答えて

4

は、ここでパッケージデータを含むためsetuptoolsのドキュメントを見てきました:http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

は基本的に、あなたは自分のsetup.pyファイルにinclude_package_data=Trueを設定する必要があります。 SubversionまたはCVSを使用している場合は、バージョン管理されたすべてのファイルが含まれます。そうでない場合は、MANIFEST.inファイルに含めるファイルを指定できます。

私はdistributeもこれをサポートしていると信じています。

これで、ファイルをパッケージ化せずにアクセスできます。つまり、main.pyでは次のようになります。

import os.path 
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt')) 
print f.read() 
f.close() 

これはパッケージ版でも動作します。 1つの注意点は、setup.pyにzip_safe = Falseも設定して、インストール中にすべてのファイルが解凍されるようにすることです。

+0

優秀、ありがとうございました。リンクしているsetuptoolsのドキュメントで定義されている "データファイル"と "リソース"の違いを明確にしてもよろしいですか?私はリソースの指示に従っていましたが、質的に異なると思われます。ありがとう! –

+0

さて、あなたの質問は私が "資源"に出会ったのは初めてでした。しかし、データファイルは確かにテンプレートのようなものに行く方法です。 – pcardune

+8

zip_safe = Falseを使用する必要はありません。代わりに、pkg_resources.resource_stream( 'packagename'、 'templates/file1.txt')を使用してください。read()とsetuptoolsはファイルシステムから、または圧縮されたeggからストリームを取得します。 –

関連する問題