Można rzeczywiście je pominąć - są one generowane albo (jeśli masz dostęp do zapisu) lub .py
jest analizowany za każdym razem go zaimportować (który kosztuje czas).
Jednak, w zależności od dystrybucji, system RPM może zawierać proste skrypty dla kompilacji .py
plików i zepnij .pyo
i .pyc
plików na dystrybucję, co sprawia, że zadanie dość łatwe.
$ 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., Można umieścić %py_compile
lub %py3_compile
do sekcji %build
i masz to, czego potrzebujesz.
Ale, jak powiedziano, ty również możesz je pominąć, jeśli chcesz używać ich z kilku instalacji Pythona o różnych numerach wersji. Ale wtedy powinieneś się upewnić, że pliki .pyc
i nigdy nie zostały utworzone, ponieważ może to zepsuć rzeczy.
Whoa, nice. Czy istnieje jednak sposób na przesłonięcie użytego 'pythona'? Jak napisałem w moim pytaniu, jest ono wewnątrz "virtenv". Notatka: głównym powodem ich pominięcia jest wynikowy rozmiar paczki. – 0xC0000022L
Możesz go zastąpić, zastępując wymienione makra w pliku '.rpmrc' lub' .rpmmacros'. – glglgl
przy użyciu samego przełącznika '--define', ponieważ cały krok kompilacji jest skryptowany, a niektóre z jego definicji są obliczane. – 0xC0000022L