[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Extracting python dependencies automatically



On Wed, 15 Aug 2007, Jeff Spaleta wrote:

On 8/15/07, Panu Matilainen <pmatilai redhat com> wrote:
For requires, try to locate any python scripts and modules and for each
found, run them through python's modulefinder which attempts to figure out
which modules a script/module uses. Then, based on the filenames gotten
from modulefinder results, turn them into python(<name>) entries, for

Thoughts / comments?

Do you have any mechanism to distinguish optional modules from hard
requirement modules? Some python applications will test for the
availability of a module through a via an exception test for optional
features and then gracefully continue if its not available.

That's the problem with interpreted languages - there's no way to get it 100% right, see below...

Looking 20 minutes into the future, is this aimed at into rpmbuild's
automatic dependancy generation scripts?

That's the idea of course, but I doubt that's going to happen in time for F8.

The big problem with using modulefinder is that it expects to be able to actually import the modules. That might work fairly ok for the occasional "rpmbuild -bb my.spec" use on developers host, but in minimal buildroots... to satisfy that, the manual Requires turn into BuildRequires, so much for automatic dependencies. In other words, the current pythondeps.py is totally useless in real world :)

It gets worse from here. Things are fairly straightforward as long as we're only talking about modules in standard locations (either things in python standard library or site-packages) but what about cases where the software uses a custom path to import private modules (eg yum importing stuff from /usr/share/yum-cli)? Since you can't verify if something is in site-packages (because you can't assume them being installed on minimal buildroot), there's no way to know if import A is on private or public module. It's possible to look through the filenames and see if there are matching *.py[co] files in non-standard locations and assume they're just private modules but there is some room for error in there.

	- Panu -


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]