Add the %pycached macro
Usage: %files ... %pycached %{python3_sitelib}/foo.py This will list: /usr/lib/python3.8/site-packages/foo.py /usr/lib/python3.8/site-packages/__pycache__/foo.cpython-38{,.opt-?}.pyc Assuming the Python 3 version is 3.8. The bytecode files are globbed, their presence is not checked. This will fail: %pycached %{python3_sitelib}/foo error: %pycached can only be used with paths explicitly ending with .py And so will any of this: %pycached %{python3_sitelib}/* %pycached %{python3_sitelib}/foo.* %pycached %{python3_sitelib}/foo.p? %pycached %{python3_sitelib}/foo.?y %pycached %{python3_sitelib}/foo.?? But this will work: %pycached %{python3_sitelib}/foo*.py And it will generate the following globs: /usr/lib/python3.8/site-packages/foo*.py /usr/lib/python3.8/site-packages/__pycache__/foo*.cpython-38{,.opt-?}.pyc When used with paths that include Python 3 version, it globs with the version: %pycached /opt/python3.10/foo.py Generates: /opt/python3.10/foo.py /opt/python3.10/__pycache__/foo.cpython-310{,.opt-?}.pyc While paths without version have less strict globs: %pycached /custom/foo.py /custom/foo.py /custom/__pycache__/foo.cpython-3*{,.opt-?}.pyc This will generate a warning in RPM build: warning: File listed twice: /custom/__pycache__/foo.cpython-38.opt-1.pyc However it ensures the optimized bytecode is there.
This commit is contained in:
parent
f0be0a2983
commit
6c63a5b7f4
@ -37,3 +37,18 @@
|
||||
%py3_install_wheel() %{expand:\\\
|
||||
pip%{python3_version} install -I dist/%{1} --root %{buildroot} --no-deps
|
||||
}
|
||||
|
||||
# This only supports Python 3.5+ and will never work with Python 2.
|
||||
# Hence, it has no Python version in the name.
|
||||
%pycached() %{lua:
|
||||
path = rpm.expand("%{?1}")
|
||||
if (string.sub(path, "-3") ~= ".py") then
|
||||
rpm.expand("%{error:%%pycached can only be used with paths explicitly ending with .py}")
|
||||
else
|
||||
print(path)
|
||||
pyminor = path:match("/python3.(%d+)/") or "*"
|
||||
dirname = path:match("(.*/)")
|
||||
modulename = path:match(".*/([^/]+).py")
|
||||
print("\\n" .. dirname .. "__pycache__/" .. modulename .. ".cpython-3" .. pyminor .. "{,.opt-?}.pyc")
|
||||
end
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ install -m 644 %{SOURCE5} \
|
||||
%changelog
|
||||
* Sat Dec 28 2019 Miro Hrončok <mhroncok@redhat.com> - 3-51
|
||||
- Define %%python, but make it work only if %%__python is redefined
|
||||
- Add the %%pycached macro
|
||||
|
||||
* Tue Nov 26 2019 Lumír Balhar <lbalhar@redhat.com> - 3-50
|
||||
- Update of bundled compileall2 module
|
||||
|
Loading…
Reference in New Issue
Block a user