python脚本中的%{uuupython34}是什么?

2024-06-26 14:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到一个python脚本以

#!%{__python34}

from __future__ import unicode_literals
# Whether we're Python 2

我猜uupython34是用来获取python2或python3.4的路径的,但是它似乎不起作用,因为输出消息说文件不存在。。。你知道吗

谢谢。你知道吗


Tags: 文件fromimport路径re脚本消息unicode
1条回答
网友
1楼 · 发布于 2024-06-26 14:35:05

我相信这是一种被称为“模板化”的技术(%{var}RPM使用的模板引擎中使用,我们可以看到in this example,特别是.spec文件)。存在许多这样的模板引擎,Jinja2Mako等等(可以在here中找到更详尽的列表)

现在让我们使用Jinja2创建一个简单的示例,我们首先创建一个模板(让我们按照惯例将它放在templates文件夹中),我们称之为python\u script\u tmpl:

#!{{ python }}

def main():
    print("It works")

现在让我们创建一个init(空脚本)来创建一个与Jinja2一起使用的环境。你知道吗

现在你应该有这样一个结构:

myapp/
  __init__.py
  templates/
    python_script_tmpl

让我们在my_app目录中启动一个shell,并运行以下行(doc to install jinja2):

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

现在在我的应用程序的根目录下,你应该有脚本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,您可以运行脚本而不会出现问题。(虽然不是很有用的脚本)

现在做模板有什么意义?

如果你必须重复很多部分的时间(例如shebang),你必须修改它,那么你就必须修改它出现的每个文件,如果你使用一个模板,你只需要修改一次变量并注入它。这是模板化的直接优势。你知道吗

注意:正如@CharlesDuffy提到的,这个脚本可能是从一个RPM包中提取的,所以除了学习或者重新打包之外,我建议您使用rpm命令行工具来运行整个包。你知道吗

相关问题 更多 >