Thorsten Kampe wrote: > * Robert Kern (Sat, 24 Nov 2007 16:33:37 -0600) >> Thorsten Kampe wrote: >>> can anyone give me a short code snippet how to install a missing >>> module via setuptools (assuming setuptools is already installed)?! >>> >>> Something like this: >>> >>> try: >>> import missing_module >>> except import_error >>> import setuptools >>> setuptools.whatever.install(missing_module) >> The recommended way to handle dependencies using setuptools is to specify >> them >> in the install_requires metadata in the setup() function call in your >> setup.py: > > It's just a simple script - no package. So I don't even have a > setup.py. > >> However, if you have special needs that really do require downloading the >> dependency at runtime instead of install-time: >> >> # >> http://peak.telecommunity.com/DevCenter/PkgResources#workingset-methods-and-attributes >> >> import pkg_resources >> pkg_resources.resolve('some_package >= 1.0') >> pkg_resources.resolve('another_package') >> >> import some_package >> import another_package > > [5]>>> pkg_resources.working_set.resolve('betterprint') > ---------------------------------------------------------------------- > ----- > AttributeError Traceback (most recent call > last) > > F:\program files\python\<ipython console> in <module>() > > F:\program files\python\lib\site-packages\setuptools-0.6c5-py2.5.egg > \pkg_resou > rces.py in resolve(self=<pkg_resources.WorkingSet object at > 0x01457710>, requi > rements=['n', 'i', 'r', 'p', 'r', 'e', 't', 't', 'e', 'b'], env=None, > installe > r=None) > 472 # Ignore cyclic or redundant dependencies > 473 continue > --> 474 dist = best.get(req.key) > dist = undefined > best.get = <built-in method get of dict object at 0x016BC660> > req.key = undefined > 475 if dist is None: > 476 # Find the best distribution and add it to the > map > > AttributeError: 'str' object has no attribute 'key'
My apologies for misleading you. There is no easy way to do this. Here is a roundabout way which might be suitable for a throwaway hack script. If it's not a throwaway hack script, then please heed Ben's advice. Alternatively, just distribute betterprint along with your script and save yourself the headache. In [1]: import betterprint --------------------------------------------------------------------------- ImportError Traceback (most recent call last) /Users/rkern/<ipython console> in <module>() ImportError: No module named betterprint In [2]: import pkg_resources In [3]: from setuptools.dist import Distribution In [4]: pkg_resources.working_set.resolve(pkg_resources.parse_requirements('betterprint'), installer=Distribution().fetch_build_egg) zip_safe flag not set; analyzing archive contents... Installed /Users/rkern/betterprint-0.1-py2.5.egg Out[4]: [betterprint 0.1 (/Users/rkern/betterprint-0.1-py2.5.egg)] -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco -- http://mail.python.org/mailman/listinfo/python-list