Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Installing modules via setuptools in a script

Reply
Thread Tools

Installing modules via setuptools in a script

 
 
Thorsten Kampe
Guest
Posts: n/a
 
      11-24-2007
Date: Fri, 23 Nov 2007 19:35:21 -0000
Message-ID: <(E-Mail Removed)>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
User-Agent: MicroPlanet-Gravity/2.70.2067

Hi,

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)


Thorsten
 
Reply With Quote
 
 
 
 
Robert Kern
Guest
Posts: n/a
 
      11-24-2007
Thorsten Kampe wrote:

> Hi,
>
> 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:

# http://peak.telecommunity.com/DevCen...ools#basic-use
setup(name="foo",
...
install_requires = [
'some_package >= 1.0',
'another_package',
],
)

However, if you have special needs that really do require downloading the
dependency at runtime instead of install-time:

#
http://peak.telecommunity.com/DevCen...and-attributes

import pkg_resources
pkg_resources.resolve('some_package >= 1.0')
pkg_resources.resolve('another_package')

import some_package
import another_package

But, please be sure that that your needs are special.

--
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

 
Reply With Quote
 
 
 
 
Thorsten Kampe
Guest
Posts: n/a
 
      11-25-2007
* 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/DevCen...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'
 
Reply With Quote
 
Ben Finney
Guest
Posts: n/a
 
      11-25-2007
Thorsten Kampe <(E-Mail Removed)> writes:

> * 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)?!

> >
> > 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.


The recommended way of installing a simple script that has
dependencies is to write a setup.py for the simple script, so that you
can declare its dependencies and have them checked on install.

--
\ "Pinky, are you pondering what I'm pondering?" "Well, I think |
`\ so, Brain, but pantyhose are so uncomfortable in the |
_o__) summertime." -- _Pinky and The Brain_ |
Ben Finney
 
Reply With Quote
 
Thorsten Kampe
Guest
Posts: n/a
 
      11-26-2007
* Ben Finney (Mon, 26 Nov 2007 09:04:51 +1100)
> Thorsten Kampe <(E-Mail Removed)> writes:
> > * 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)?!
> > >
> > > 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.

>
> The recommended way of installing a simple script that has
> dependencies is to write a setup.py for the simple script, so that you
> can declare its dependencies and have them checked on install.


Yes, I know. But this script is not going to be installed - just run.
And therefore I'd like to know if it's possible to install missing
dependencies in the script itself via importing setuptools. Or do I
have to use "subprocess('easy_install')"?

Thorsten
 
Reply With Quote
 
Robert Kern
Guest
Posts: n/a
 
      11-26-2007
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/DevCen...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.pa rse_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

 
Reply With Quote
 
Thorsten Kampe
Guest
Posts: n/a
 
      11-26-2007
* Robert Kern (Mon, 26 Nov 2007 04:34:17 -0600)
> 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.

[...]
> 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.pa rse_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)]


Okay, works for me, thanks. Is there an option to have the downloaded
module installed into the "site-packages" directory (and not into the
current)?

Thorsten
 
Reply With Quote
 
Robert Kern
Guest
Posts: n/a
 
      11-26-2007
Thorsten Kampe wrote:
> * Robert Kern (Mon, 26 Nov 2007 04:34:17 -0600)
>> 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.

> [...]
>> 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.pa rse_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)]

>
> Okay, works for me, thanks. Is there an option to have the downloaded
> module installed into the "site-packages" directory (and not into the
> current)?


No. This is a hack. If you need things installed properly, use a setup.py.

--
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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Installing a script and use it via python -m Oktaka Com Python 1 01-07-2012 09:31 PM
installing setuptools on Windows custom python install Eric Frederich Python 0 04-18-2011 04:53 PM
[Pyrex] Compiling via setuptools Kless Python 0 12-19-2008 11:39 AM
How can I package a python script and modules into a single script? Noah Python 10 11-23-2005 09:45 AM



Advertisments