[Fedora-packaging] Python Egg Draft 3

Toshio Kuratomi a.badger at gmail.com
Fri Sep 14 02:29:49 UTC 2007


Panu Matilainen wrote:
> On Wed, 12 Sep 2007, Toshio Kuratomi wrote:
> 
>> Panu Matilainen wrote:
>>>
>>> Separating the namespaces is a fundamental problem for the dependency
>>> extractor. For provides this is obviously not an issue, but requires
>>> need to be generated without being able to actually locate (and possibly
>>> import) the actual module. Python syntax for importing egg- and regular
>>> modules is the same, so they need to live in the same namespace,
>>>  otherwise the manual Requires just turn into manual BuildRequires and
>>> the depency extractor will be just adding syntactic sugar for nothing :)
>>>
>> I think I've figured out a way to make this almost work::
>>  import sqlalchemy
>>
>> is equal to Requires python(sqlalchemy)
>>
>> Any of these::
>>  __requires__='SQLAlchemy'
>>  pkg_resources.require('SQLAlchemy')
>>  requires.txt:
>>    install_requires = [ 'SQLAlchemy' ]
>>
>> are equal to python-egg(sqlalchemy)
>>
>> This breaks down when thinking about what happens in this case::
>>  __requires__='TurboGears'
>>  import pkg_requires
>>  import sqlachemy
>>
>> At this point you have to know whether TurboGears or anything that it
>> requires has a requires.txt which includes ['SQLAlchemy'].  If it does
>> we are using the egg interface to sqlalchemy.  If it doesn't we are
>> using the normal interface.
>>
>> So, assuming we remove our patch that stops generation of egg-info files
>> for distutils generated modules for F9, I agree that there isn't very
>> much value for quite a bit of work.
> 
> Let me put it this way: why exactly do you want the eggs in a separate
> namespace? If using modules from them *required* using new interfaces
> it'd be a different story, but since they can be imported just like any
> regular module they should be in the same namespace. (or am I missing
> something here - I'm certainly not very familiar with the egg stuff?)
> 
Well, the way I'm proposing in the egg draft we will have
compat-packages that are only importable via an egg interface.  For
instance python-sqlalchemy0.3 has these directories::
  %{python_sitelib}/SQLAlchemy-0.3.10-py2.5.egg/
  %{python_sitelib}/SQLAlchemy-0.3.10-py2.5.egg/sqlalchemy

To be able to import it you need to do something like this:

__requires__='SQLAlchemy >= 0.3, < 0.4alpha'
import pkg_resources
import sqlalchemy

Or manually add %{python_sitelib}/SQLAlchemy-0.3.10-py2.5.egg/sqlalchemy
to sys.path.

The main python-sqlalchemy module would be directly importable or you
could select it specifically using something like
__requires__='SQLAlchemy >= 0.4, < 0.5'.

> One possibility would be to *only* extract python module dependencies
> from egg modules and software using the new requires interfaces and
> simply forget about the old-style modules.
> 
I'd rather we extract old-style modules and forget about eggs as the
eggs don't come into play as often for us.

-Toshio

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 251 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/fedora-packaging/attachments/20070913/b25e9821/attachment.sig>


More information about the Fedora-packaging mailing list