我可以在RPM中省略.pyo和.pyc文件吗?

时间:2013-08-19 10:56:54

标签: python python-2.7 virtualenv rpm

我将一个Python应用程序及其virtenv环境捆绑在一个RPM中,以便于部署。省略所有.pyo.pyc文件是否合理?

我要做的是在compileall.py实例中的安装后操作中调用virtenv。这有用吗,还是会弄乱这些东西?

注意:我意识到我可以尝试使用一台机器,但是a。)这不会给我一个确定的答案,关于这是否适用于其他机器和b。)其他人可能有相同的问题,我没有找不到答案。

2 个答案:

答案 0 :(得分: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文件,因为这可能会搞砸了。

答案 1 :(得分:1)

只要您拥有.py个文件,它就是安全的。由.pyo.pyc文件从原始.py文件生成。

另请参阅What do the python file extensions, .pyc .pyd .pyo stand for?If Python is interpreted, what are .pyc files?