我将一个Python应用程序及其virtenv环境捆绑在一个RPM中,以便于部署。是否删除所有.pyo
和.pyc
文件是一个合理的决定?我可以在RPM中忽略.pyo和.pyc文件吗?
我想要做的是从virtenv
实例中在安装后操作中调用compileall.py
。这是行得通还是会让事情变得糟糕?
注意:我意识到我可以在一台机器上尝试,但a。)这不会给我一个结论性的答案,关于这是否可以在其他机器上工作和b)。其他人可能会有同样的问题,我没有找到答案。
我将一个Python应用程序及其virtenv环境捆绑在一个RPM中,以便于部署。是否删除所有.pyo
和.pyc
文件是一个合理的决定?我可以在RPM中忽略.pyo和.pyc文件吗?
我想要做的是从virtenv
实例中在安装后操作中调用compileall.py
。这是行得通还是会让事情变得糟糕?
注意:我意识到我可以在一台机器上尝试,但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}
I. e。,你可以把%py_compile
resp。 %py3_compile
纳入你的%build
部分,你有你所需要的。
但是,如上所述,如果您想从多个版本号的多个Python安装中使用它们,您也可以忽略它们。但是,那么你应该确保从未创建.pyc
和.pyo
文件,因为这可能会弄乱一些东西。
只要你有他们的.py
文件,它是安全的。由于.pyo
和.pyc
文件是从原始.py
文件生成的。
也What do the python file extensions, .pyc .pyd .pyo stand for?和If Python is interpreted, what are .pyc files?
谢谢。我知道*他们是什么,但我仍然想在RPM安装后重新生成它们。所以我的问题超出了你的答案的范围:)(也就是我使用'virtenv'这个事实似乎改变了一些规则) – 0xC0000022L
哇,很好。有没有办法来覆盖使用'python',虽然?正如我在我的问题中写的,它在'virtenv'中。附注:忽略它们的主要原因是包装的最终尺寸。 – 0xC0000022L
您可以通过替换'.rpmrc'或'.rpmmacros'文件中提到的宏来覆盖它。 – glglgl
使用'--define'开关本身,因为整个构建步骤都是脚本化的,并且正在计算一些定义。 – 0xC0000022L