0xC*_*22L 8 python rpm virtualenv python-2.7
我将一个Python应用程序及其virtenv环境捆绑在一个RPM中,以便于部署.省略所有.pyo和.pyc文件是否是一个合理的决定?
我要做的是compileall.py在virtenv实例中调用安装后操作.这有用吗,还是会弄乱这些东西?
注意:我意识到我可以尝试一台机器,但是a.)这不会给我一个确定的答案,这是否适用于其他机器和b.)其他人可能有相同的问题,我没有找到它回答.
您确实可以省略它们 - 它们要么是生成的(如果您有写访问权限),要么是.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}
Run Code Online (Sandbox Code Playgroud)
即,您可以将%py_compileresp。%py3_compile进入你的%build部分,你就有了你需要的东西。
但是,如前所述,如果您想在多个不同版本号的 Python 安装中使用它们,您也可以省略它们。但是,您应该确保永远不会创建.pyc和.pyo文件,因为这可能会弄乱事情。