2016-10-06 4 views
1

から作成されたPIPパッケージにJinja2のテンプレートを使用することができません私は、次のディレクトリ構造setup.pyは、Pythonスクリプトであるのpythonモジュール

foo 
    |--MANIFEST.in 
    |--requirements.txt 
    |--setup.py 
    |--foo.py 
    |--templates/ 
    |--bar.tmpl 

とPythonのプロジェクトを持っています。以前は、インストールスクリプトを使用してスクリプトを自分のプライベートbinにシンボリックリンクしていましたが(成功して使用していましたが)、初めてパッケージ化することに決めました。私は、プロジェクトのルートディレクトリから$ pip install .を使用してvirutalenvにパッケージを正常にインストールできました。jinja2でテンプレートを生成するまで、ほとんどのスクリプトを実行できます。 templates dirがパッケージの残りの部分とともにインストールされていないか、またはスクリプトがtemplates dirへのパスを正しく見つけられていないかのようです。 foo.pyから

抜粋:

from jinja2 import Environment, ModuleLoader 

def generate_readme(template_file): 
    template_env = Environment(loader=PackageLoader('foo','templates')) 
    template = template_env.get_template(template_file)   
    template_vars = {"title": get_title()} 
    output = template.render(template_vars) 
    return output 

MANIFEST.in

from setuptools import setup 

setup(name='foo',               
     py_modules=['foo'], 
     entry_points={'console_scripts': ['foo = foo:foo']}   
     include_package_data=True, 
     zip_safe=False) 

内容::

setup.pyから template_file

抜粋としてこの関数に渡されます

include templates/* 

関連するトレースバック:

File "/home/username/.virtualenvs/foo/local/lib/python2.7/site-packages/foo.py", line 30, in generate_readme 
template = template_env.get_template(template_file) 
    File "/home/username/.virtualenvs/foo/local/lib/python2.7/site-packages/jinja2/environment.py", line 812, in get_template 
return self._load_template(name, self.make_globals(globals)) 
    File "/home/username/.virtualenvs/foo/local/lib/python2.7/site-packages/jinja2/environment.py", line 774, in _load_template 
cache_key = self.loader.get_source(self, name)[1] 
    File "/home/username/.virtualenvs/foo/local/lib/python2.7/site-packages/jinja2/loaders.py", line 235, in get_source 
    raise TemplateNotFound(template) 
jinja2.exceptions.TemplateNotFound: bar.tmpl 

私は神社とsetuptoolsのドキュメントを読んで、同様のstackoverflowのスレッドを読んで、グーグルの数時間を過ごした、と同様のコードを読んでいます。私がテストしたものはすべて同じエラーメッセージになりますが、私は多少なりとも迷っています。どんな助けでも大歓迎です。

答えて

1

MANIFEST.inはすなわちpython setup.py sdist、ソース配布物に含めるファイル何言うが、pip install .だけでsetuptoolsのに呼び出し、package_dataとの特別な何もしないので、それが直接のファイルがインストールされているものには影響しません。

ファイルをパッケージデータまたは追加ファイルとしてsetup.pyファイルに含める必要があります。

詳細については、data_filesおよびpackage_dataに注意してください。https://docs.python.org/2/distutils/setupscript.htmlを参照してください。

+0

助けてくれてありがとう!テンプレートdirはパッケージにロードされます。 jinja hehをデバッグするようになりました。 –