问题
Because I have to install multiple versions of Python on multiple Oracle Linux servers which are built via a kickstart process, I wanted to build a python rpm for our yum repository. I was able to build Python manually using 'make altinstall' which doesn't install over your default system Python installation, so I thought that would be the way to go.
After much trial and error, I managed to build an rpm starting with a .bz2 python 2.7 package - but now when I try to install it, I get an error:
error: Failed dependencies:
/usr/local/bin/python is needed by Python-2.7.2-1.i386
What the...??? Python is what I'm trying to install!!! And system default Python (2.4) is in /usr/bin/python!!! And my prototyping location for the python directory is /tmp/python2.7 (and the executable was /tmp/python2.7/bin/python2.7). So why is it looking in /usr/local/bin?
Here is the core of my RPM SPEC:
%prep
%setup -q
%build
./configure --prefix=/tmp/python2.7
make
%install
make altinstall
I take a closer look at the rpm build log and I see:
Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]
Ok, so there's where /usr/local/bin comes in... Now, the question is, how is it determining these requirements? Did I specify something wrong? Do I need to override something?
Like many rpm newbies, I get the build part, but I don't really "grok" what happens at the end of rpmbuild and what actually gets put into the rpm file (other than the files you specify in %files) and then what actually happens when you do the rpm install.
Can anyone suggest why my install is failing or what I might read to understand why my rpm build is requiring what I'm trying to build?
回答1:
You should be able to fix this issue by adding the following line to your spec file:
AutoReq: no
Here is my understanding of why this is necessary. When rpmbuild runs across .py files with a #! (shebang) it will automatically add the binary that the shebang specifies as a requirement. Not only that, if the shebang is #!/usr/bin/env python
, it will add a dependency for whatever that resolves to (first python on $PATH
).
You either need to turn off the automatic requirement processing or find all shebangs that will cause problems and change them to something else.
回答2:
rpmbuild can get pretty smart and this is one of those cases. It probably pulled the /usr/local/bin/python
from one of your script files containing something like:
#!/usr/local/bin/python
at the top. Try grep'ing for this path in the files within your bz2 file.
来源:https://stackoverflow.com/questions/7423300/python-rpm-i-built-wont-install