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

Python 我可以省略RPM中的.pyo和.pyc文件吗?,python,python-2.7,virtualenv,rpm,Python,Python 2.7,Virtualenv,Rpm,我将一个Python应用程序及其virtenv环境捆绑在RPM中,以便于部署。省略所有.pyo和.pyc文件是一个合理的决定吗 我要做的是从virtenv实例中调用安装后操作中的compileall.py。这有用吗,还是会把事情搞砸 注意:我意识到我可以在一台机器上尝试,但a.)这不能给我一个关于这是否在其他机器上工作的结论性答案,b.)其他人可能有相同的问题,但我没有找到答案。只要你有他们的.py文件,这是安全的。As.pyo和.pyc文件是从原始的.py文件生成的 另请参见和您确实可以省略它

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

我要做的是从
virtenv
实例中调用安装后操作中的
compileall.py
。这有用吗,还是会把事情搞砸


注意:我意识到我可以在一台机器上尝试,但a.)这不能给我一个关于这是否在其他机器上工作的结论性答案,b.)其他人可能有相同的问题,但我没有找到答案。

只要你有他们的
.py
文件,这是安全的。As
.pyo
.pyc
文件是从原始的
.py
文件生成的


另请参见和

您确实可以省略它们-它们要么是生成的(如果您有写访问权限),要么是每次导入时都会解析
.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\u编译成
resp<代码>%py3\u将
编译到您的
%build
部分,您就有了所需的内容


但是,如前所述,如果您想在不同版本号的几个Python安装中使用它们,也可以省略它们。但是,您应该确保永远不会创建
.pyc
.pyo
文件,因为这可能会把事情搞砸。

谢谢。我知道它们是什么,但我仍然希望在RPM安装后重新生成它们。所以我的问题有点超出了你的回答范围:)(也是w.r.t.事实上我使用了
virtenv
,这似乎改变了一些规则)哇,很好。但是,有没有一种方法可以覆盖使用的
python
?正如我在问题中所写,它在一个
virtenv
中。旁注:忽略它们的主要原因是生成的包的大小。您可以通过替换
.rpmrc
.rpmmacros
文件中提到的宏来覆盖它。使用
--define
开关本身,因为整个构建步骤都已编写脚本,并且正在计算一些定义。