我将 Python 应用程序及其 virtenv 环境捆绑在 RPM 中,以便于部署。.pyo
省略所有和.pyc
文件是一个合理的决定吗?
我要做的是compileall.py
从virtenv
实例中调用安装后操作。这行得通,还是会搞砸事情?
注意:我意识到我可以在一台机器上尝试,但是 a.)这不会给我一个关于这是否适用于其他机器的结论性答案,并且 b.)其他人可能有同样的问题,但我没有找到它回答了。
我将 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}
即,你可以把%py_compile
resp。%py3_compile
进入你的%build
部分,你有你需要的东西。
但是,如前所述,如果您想从多个不同版本号的 Python 安装中使用它们,也可以省略它们。但是你应该确保永远不会创建.pyc
和.pyo
文件,因为这可能会搞砸事情。
只要您有他们的.py
文件,它就是安全的。As.pyo
和.pyc
文件是从原始.py
文件生成的。
另请参阅python 文件扩展名 .pyc .pyd .pyo 代表什么?如果 Python 被解释,什么是 .pyc 文件?