[PEAK] several version of eggs

cedric briner work at infomaniak.ch
Wed Oct 8 01:50:48 EDT 2008


 >> Hello,
 >>
########################################
1 ######################################
########################################

 >> I thought that with eggs, I will be able to choose at run time, which
 >> version of an egg I would like to use.
 >
 > You must install them using the --multi-version (-m) option of
 > easy_install.

Someone told me the same on comp.lang.python. So I didn't uninstall it, 
but I've just redo a:
$ easy_install -m 'SQLAlchemy==0.4.6'
...
$ easy_install -m 'SQLAlchemy==0.4.4'
...

check that the easy-install.pth doesn't contain any more some sql
entry:
$ grep -i sql /home/system/briner/py-lib/easy-install.pth
./SQLObject-0.9.4-py2.4.egg
no more sqlachemy in it

and now it still not work as desired.

$ python
 >>> import pkg_resources
 >>> pkg_resources.require("SQLAlchemy==0.4.4")

[SQLAlchemy 0.4.4 (/home/system/briner/py-lib/SQLAlchemy-0.4.4-
py2.5.egg)]
 >>> pkg_resources.require("SQLAlchemy==0.4.6")

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 626,
in require
     needed = self.resolve(parse_requirements(requirements))
   File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 528,
in resolve
     raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (SQLAlchemy 0.4.4 (/home/system/briner/
py-lib/SQLAlchemy-0.4.4-py2.5.egg),
Requirement.parse('SQLAlchemy==0.4.6'))

CTRL+D

So it seems that we still have the same behavior as described before.


.....
I must recognize that I get my hand dirty trying to understand how this 
stuff worked. by removing some bad installation in the past.

What I do have now is:

-----------------

$ cd /usr/lib/python2.5
$ find ./ -name \*pth
./site-packages/PIL.pth           Image Library
./site-packages/Numeric.pth       Scientific stuff
./site-packages/altinstall.pth    EasyInstall#administrator-installation
./site-packages/wx.pth            Scientific stuff
./site-packages/python-support.pth automated rebuilding support
./site-packages/pygst.pth         GStreamer Stuff

$ more /usr/lib/python2.5/site-packages/altinstall.pth
import site; site.addsitedir('/home/system/briner/py-lib')

-----------------

$ ls -ld ~/.py*
drwxr-xr-x ... /home/system/briner/.pybackpack
-rw-r--r-- ... /home/system/briner/.pydistutils.cfg
drwxr-xr-x ... /home/system/briner/.python-eggs

$ more /home/system/briner/.pydistutils.cfg
[install]
install_lib = ~/py-lib
install_scripts = ~/bin

-----------------

$ ls -l ~/py-lib
drwxr-xr-x ... Cheetah-2.0.1-py2.4-linux-i686.egg
drwxr-xr-x ... Cheetah-2.0.1-py2.5-linux-x86_64.egg
drwxr-xr-x ... CherryPy-2.3.0-py2.4.egg
drwxr-xr-x ... CherryPy-2.3.0-py2.5.egg
drwxr-xr-x ... configobj-4.3.2-py2.4.egg
-rw-r--r-- ... configobj-4.5.2-py2.5.egg
-rw-r--r-- ... DecoratorTools-1.7-py2.4.egg
-rw-r--r-- ... DecoratorTools-1.7-py2.5.egg
-rw-r--r-- ... easy-install.pth
drwxr-xr-x ... foo-0.3dev-py2.5.egg
drwxr-xr-x ... foo-0.4dev-py2.5.egg
drwxr-xr-x ... FormEncode-0.9-py2.4.egg
drwxr-xr-x ... FormEncode-1.0.1-py2.5.egg
drwxr-xr-x ... fw_obsge_0.1
drwxr-xr-x ... fw_obsge_0.2
-rw-r--r-- ... Genshi-0.4.4-py2.4.egg
drwxr-xr-x ... gsquickstart-1.0-py2.4.egg
drwxr-xr-x ... IPy-0.56-py2.4.egg
drwxr-xr-x ... jquery-1.2.3-py2.4.egg
drwxr-xr-x ... kid-0.9.6-py2.4.egg
drwxr-xr-x ... kid-0.9.6-py2.5.egg
drwxr-xr-x ... Paste-1.6-py2.4.egg
drwxr-xr-x ... Paste-1.7-py2.5.egg
drwxr-xr-x ... PasteDeploy-1.3.1-py2.4.egg
drwxr-xr-x ... PasteDeploy-1.3.1-py2.5.egg
-rwxr-xr-x ... paster
drwxr-xr-x ... PasteScript-1.6.2-py2.4.egg
drwxr-xr-x ... PasteScript-1.6.2-py2.5.egg
-rw-r--r-- ... PyProtocols-1.0a0dev_r2302-py2.5-linux-x86_64.egg
-rw-r--r-- ... PyProtocols-1.0a0-py2.4-linux-i686.egg
-rw-r--r-- ... rdiff_backup-1.0.5-py2.5-linux-x86_64.egg
-rw-r--r-- ... RuleDispatch-0.5a0.dev_r2306-py2.4-linux-i686.egg
-rw-r--r-- ... RuleDispatch-0.5a0.dev_r2306-py2.5-linux-x86_64.egg
drwxr-xr-x ... setuptools-0.6c8-py2.4.egg
-rw-r--r-- ... setuptools-0.6c8-py2.5.egg
-rw-r--r-- ... setuptools.pth
-rw-r--r-- ... simplejson-1.7.4-py2.4-linux-i686.egg
-rw-r--r-- ... simplejson-1.9.1-py2.5-linux-x86_64.egg
-rw-r--r-- ... site.py
drwxr-xr-x ... SQLAlchemy-0.4.4-py2.4.egg
drwxr-xr-x ... SQLAlchemy-0.4.4-py2.5.egg
drwxr-xr-x ... SQLAlchemy-0.4.6-py2.5.egg
drwxr-xr-x ... SQLObject-0.9.4-py2.4.egg
drwxr-xr-x ... TurboCheetah-1.0-py2.4.egg
drwxr-xr-x ... TurboCheetah-1.0-py2.5.egg
drwxr-xr-x ... TurboGears-1.0.4.4-py2.4.egg
drwxr-xr-x ... TurboGears-1.0.4.4-py2.5.egg
drwxr-xr-x ... TurboJson-1.1.2-py2.4.egg
drwxr-xr-x ... TurboJson-1.1.2-py2.5.egg
drwxr-xr-x ... TurboKid-1.0.4-py2.4.egg
drwxr-xr-x ... TurboKid-1.0.4-py2.5.egg

$ more ~/py-lib/easy-install.pth
import sys; sys.__plen = len(sys.path)
./SQLObject-0.9.4-py2.4.egg
./Genshi-0.4.4-py2.4.egg
./gsquickstart-1.0-py2.4.egg
./jquery-1.2.3-py2.4.egg
./IPy-0.56-py2.4.egg
./TurboGears-1.0.4.4-py2.5.egg
./TurboKid-1.0.4-py2.5.egg
./TurboJson-1.1.2-py2.5.egg
./TurboCheetah-1.0-py2.5.egg
./simplejson-1.9.1-py2.5-linux-x86_64.egg
./setuptools-0.6c8-py2.5.egg
./RuleDispatch-0.5a0.dev_r2306-py2.5-linux-x86_64.egg
./PasteScript-1.6.2-py2.5.egg
./FormEncode-1.0.1-py2.5.egg
./DecoratorTools-1.7-py2.5.egg
./configobj-4.5.2-py2.5.egg
./CherryPy-2.3.0-py2.5.egg
./kid-0.9.6-py2.5.egg
./Cheetah-2.0.1-py2.5-linux-x86_64.egg
./PyProtocols-1.0a0dev_r2302-py2.5-linux-x86_64.egg
./PasteDeploy-1.3.1-py2.5.egg
./Paste-1.7-py2.5.egg
./rdiff_backup-1.0.5-py2.5-linux-x86_64.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; 
p=getattr(sys,'__egginsert',0); sys.path[p:p
]=new; sys.__egginsert = p+len(new)


-----------------

$ more `which easy_install`
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 
'setuptools==0.6c8','console_scripts','easy_install'
__requires__ = 'setuptools==0.6c8'
import sys
from pkg_resources import load_entry_point

sys.exit(
    load_entry_point('setuptools==0.6c8', 'console_scripts', 
'easy_install')()
)

 >
 >> so it feels that the only package I can call is the latest one
 >> installed !!!
 >
 > If the last one you install is installed with -m, you'll be able to use
 > whichever you want, but you will always have to use require() to import
 > *any* of them.
that's fine with me.
 >

########################################
2 ######################################
########################################

 > If you want to be able to use any version, any time, then you need to
 > package the code that's doing that with its own setup.py, requirements,
 > and entry point scripts.  Such scripts can use whatever version they
 > want, even if not installed with -m.  See the setuptools manual for more
 > information on this.
sorry, but I'm a bit lost now... I'll try to understand this, when the 
problem aboved the '####' will be solved

Anyway I'll give a look at it !


So do you mean that if I do install two version of the same module, I 
can only use the last one installed (timely speaking).
And that if I'd like to use the former version, I have to package my 
scripts into an egg
Thanks for the information, I'll have a look .

########################################
3 ######################################
########################################
Do you have some small example to test, because it is always much more 
easier to learn and understand with example that works :) (because my don't)


cEd
-- 

Cedric BRINER
Geneva - Switzerland



More information about the PEAK mailing list