May I omit .pyo and .pyc files in an RPM?

9
我正在将一个Python应用程序和它的virtenv环境一起打包到RPM中,以便更轻松地部署。省略所有.pyo和.pyc文件是一个可行的决策吗?
相反,我会在post-install操作中从virtenv实例中调用compileall.py。这样做是否有效,还是会出现问题?
注意:我意识到我可以试一台机器,但是a.)这不能给我一个确切的答案,是否能在其他机器上工作,b.)其他人可能有同样的问题,而我没有找到答案。
2个回答

3

你确实可以省略它们 - 如果你有写入权限,它们会自动生成,或者每次导入文件时都会解析 .py 文件(这需要时间)。

但是,根据你的发行版,你的 RPM 系统可能包含用于编译 .py 文件并在分发时捆绑 .pyo.pyc 文件的简单脚本,这使得任务变得相当容易。

$ rpm --showrc | grep -A 7 py.*_compile
-14: py3_compile(O)
find %1 -name '*.pyc' -exec rm -f {} ";"
python3 -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1
%{-O:
find %1 -name '*.pyo' -exec rm -f {} ";"
python3 -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1
}
-14: py3_incdir /usr/include/python3.3m
--
-14: py_compile(O)
find %1 -name '*.pyc' -exec rm -f {} \;
python -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1
%{-O:
find %1 -name '*.pyo' -exec rm -f {} \;
python -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1
}
-14: py_incdir  %{py_prefix}/include/python%{py_ver}

也就是说,您可以将%py_compile%py3_compile放入%build部分,从而获得所需的功能。

但是,正如前面所说,如果您想从各种版本的Python安装中使用它们,也可以省略它们。但是,这样一来,您应该确保不要创建.pyc.pyo文件,因为这可能会弄乱事情。


哇,不错。但是有没有办法覆盖使用的 python 呢?正如我在问题中所写的那样,它在 virtenv 中。顺便说一下:省略它们的主要原因是软件包的大小。 - 0xC0000022L
您可以通过在.rpmrc.rpmmacros文件中替换提到的宏来覆盖它。 - glglgl
使用--define开关本身,并且整个构建步骤都是脚本化的,一些定义正在被计算。 - 0xC0000022L

1

1
谢谢。我知道它们是什么,但我仍然想在RPM安装后重新生成它们。所以我的问题超出了您的回答范围 :) (还涉及到我使用的virtenv改变了一些规则) - 0xC0000022L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接