我將一個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