On Sat, 2005-10-01 at 13:17 +0000, Alan Milligan wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
I wonder if anyone has a solution to incorrect path-names in
byte-compiled python packages.
In the normal dist-utils install step within the context of an rpmbuild,
all paths get prepended
/var/tmp/buildroot-.../usr/lib/python2.x/site-packages. This causes
incorrect stack trace information to be shown.
Two solutions:
1) In FC4, there's an rpm script: /usr/lib/rpm/brp-python-bytecompile
which performs byte compilation correctly. I believe it will
re-compile code that distutils already installed as well. Let this do
its job and everything should be fine.
2) To create a spec that works for previous versions of FC you have to
recompile the code yourself. Here's a snippet::
%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from
distutils.sysconfig import get_python_lib; print get_python_lib()")}
[...]
%install
file=roman.py
extradest=%{python_sitelib}
fullextradest=$RPM_BUILD_ROOT/$extradest
install -m 0644 extras/$file $fullextradest
%{__python} -c "import py_compile; py_compile.compile(\
'$fullextradest/$file', \
'$fullextradest/$file' + 'c', \
'$extradest/$file')"
%{__python} -O -c "import py_compile; py_compile.compile(\
'$fullextradest/$file', \
'$fullextradest/$file' + 'o', \
'$extradest/$file')"
The variables at top will need some tweaking. In most situations you'll
want a for loop instead of simply assigning one value to $file. And you
may have to change $extradest if you aren't installing a python module
to the sitelib.
I'd taken to doing byte-compilation in the %post step to fix
this, but
I've discovered a much worse effect from this in that all the .pyc and
pyo files thus fall outside RPM control, and when removing the package,
stay in place, effectively negating the removal (although the
translation units are definitely gone...)
Don't do this! As you've discovered, it's broken :-)
-Toshio