[SciPy-user] egg dependency?

Alan G Isaac aisaac at american.edu
Fri Dec 2 19:59:27 CST 2005


>> On Fri, 2 Dec 2005, Pearu Peterson apparently wrote: 
>>> Without looking into details much, this demonstrates well 
>>> the evilness of using  `try: .. except: ..` blocks when 
>>> checking the availability of packages. Sure, it's very 
>>> convinient but there are always (or will be) cases where 
>>> this sugar fails (or will so). 



> On Fri, 2 Dec 2005, Alan G Isaac wrote: 
>> What is the preferred approach? 



On Fri, 2 Dec 2005, Pearu Peterson apparently wrote: 
> That's a good question and the answer will depend on a particular case. 
> However, there are few suggestions that will minimize the risk of 
> using try-except blocks: 
>   - the contents of try block should be minimal, even if then overall code 
>     will be more verbose. 
>   - except block should be as explicit as possible about what 
>     exceptions are expected, it should raise exception in all other cases. 
>   - and finally, don't use it when it is avoidable, it often is. 

> In scipy.distutils.core case I see the following problems. First, the code 

> try: 
>      from setuptools import setup as old_setup 
>      # very old setuptools don't have this 
>      from setuptools.command import bdist_egg 
>      have_setuptools = 1 
> except ImportError: 
>      from distutils.core import setup as old_setup 
>      have_setuptools = 0 

> has a pitfall in the case when `from setuptools import setup as 
> old_setup` succeeds but `from setuptools.command import bdist_egg` fails 
> -- old_setup may be polluted. 

> So, I would write (not tested code follows) 

> have_setuptools = False 
> try: 
>      import setuptools 
>      try: 
>          import setuptools.command.bdist_egg 
>          have_setuptools = True 
>      except ImportError, msg: 
>          print 'setuptools too old:',msg,'Ignoring.' 
> except ImportError, msg: 
>      print 'setuptools not available:',msg,'Ignoring.' 

> if have_setuptools: 
>      from setuptools import setup as old_setup 
>      from setuptools.command import bdist_egg 
>      ... 
> else: 
>      from distutils.core import setup as old_setup 
>      ... 


Thanks for this useful elaboration!
Alan Isaac




More information about the SciPy-user mailing list