私は(%{var}
は、我々がin this exampleを見ることができるようにRPMが使用するテンプレートエンジン内のインスタンスのために使用され、特に.spec
ファイルを参照してください)、それは、「テンプレート」として知られている技術であると考えています。そして、これらのテンプレートエンジンの多くは
今
のは、簡単な例を作成するためにJinja2のを使用してみましょうが、最初に作る事がテンプレートであるMakoなどなど(より完全なリストは、hereを見つけることができる)、Jinja2、存在しますのは、それを呼びましょう、(のが慣例に従うことをtemplates
フォルダに入れてみましょう)、python_script_tmpl:
#!{{ python }}
def main():
print("It works")
今度はJinja2のに使用するための環境を作成するためにのinit(空のスクリプト)を作成してみましょう。
今、あなたのような構造を持っている必要があります。rootで
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader("__init__", "templates")) #use the blank __init__ script to init the environment, and the templates folder to load templates
tmpl = env.get_template("python_script_tmpl") #load the template
tmpl.stream(python="/usr/bin/env python3").dump("python_script.py") #create from the template a script called python_script.py
そして今:
myapp/
__init__.py
templates/
python_script_tmpl
だがmy_app
ディレクトリにシェルを起動し、次の行(doc to install jinja2)を実行してみましょうmy_appにはpython_script.py
というスクリプトが必要です。それは次のようになります。
#!/usr/bin/env python3
def main():
print("It works")
最後のフォルダ構造で
:
myapp/
__init__.py
python_script.py
templates/
python_script_tmpl
shebang and the env is correctly configuredあなたは問題なしでスクリプトを実行することができますと仮定。 (かなり有用なスクリプトではありませんが)
テンプレートのポイントは何ですか?
多くの時間(例えばシバン)を繰り返す必要があり、それを修正する必要がある場合は、表示されるすべてのファイルに対して修正する必要があります。変数を一度変更して注入するだけで済みます。これはテンプレート化の単純な利点です。
P.S:@CharlesDuffyは、RPM
パッケージから抽出される可能性が高いため、学習目的以外のパッケージや再パッケージ化を除いて、rpmコマンドラインツールを使用してパッケージ全体を実行することをお勧めします。
私は構文がテンプレート変数([Jinja](http://jinja.pocoo.org)のようなものです)と思っています。ですから、 '__python34:/ usr/bin/python3.4'のような変数を別のファイルに宣言し、このスクリプトでテンプレートエンジンを実行すると、出力は'#!/ usr/bin/python3 .4' [このスレッド](https://stackoverflow.com/questions/6908143/should-i-put-shebang-in-python-scripts-and-what-form-should-it-take)かなり説明します。 Pythonでシボンを使う – Adonis