Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Python

find out whether a module exists (without importing it)

 

 

Python python RSS feed   Index | Next | Previous | View Threaded


gelonida at gmail

Aug 6, 2012, 1:48 PM

Post #1 of 9 (270 views)
Permalink
find out whether a module exists (without importing it)

Is this possible.

let's say I'd like to know whether I could import the module
'mypackage.mymodule', meaning,
whther this module is located somewhere in sys.path

i tried to use

imp.find_module(), but
it didn't find any module name containing a '.'

Am I doing anything wrong?

Is there another existing implementation, that helps.

I could do this manually, but this is something I'd just like to do if
necessary.


--
http://mail.python.org/mailman/listinfo/python-list


miki.tebeka at gmail

Aug 6, 2012, 2:58 PM

Post #2 of 9 (264 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

> imp.find_module(), but
> it didn't find any module name containing a '.'
The docs (http://docs.python.org/library/imp.html#imp.find_module) clearly say:

"This function does not handle hierarchical module names (names containing dots). In order to find P.M, that is, submodule M of package P, use find_module() and load_module() to find and load package P, and then use find_module() with the path argument set to P.__path__. When P itself has a dotted name, apply this recipe recursively."

See https://gist.github.com/3278829 for possible implementation.
--
http://mail.python.org/mailman/listinfo/python-list


miki.tebeka at gmail

Aug 6, 2012, 2:58 PM

Post #3 of 9 (263 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

> imp.find_module(), but
> it didn't find any module name containing a '.'
The docs (http://docs.python.org/library/imp.html#imp.find_module) clearly say:

"This function does not handle hierarchical module names (names containing dots). In order to find P.M, that is, submodule M of package P, use find_module() and load_module() to find and load package P, and then use find_module() with the path argument set to P.__path__. When P itself has a dotted name, apply this recipe recursively."

See https://gist.github.com/3278829 for possible implementation.
--
http://mail.python.org/mailman/listinfo/python-list


gelonida at gmail

Aug 6, 2012, 3:40 PM

Post #4 of 9 (261 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

On 08/06/2012 11:58 PM, Miki Tebeka wrote:
>> imp.find_module(), but
>> it didn't find any module name containing a '.'
> The docs (http://docs.python.org/library/imp.html#imp.find_module) clearly say:
>
> "This function does not handle hierarchical module names(names
> containing dots).
Thanks,
Well this explains.

> In order to find P.M, that is, submodule M of package P, use
find_module() and load_module() to find and load package P, and then use
find_module() with the path argument set to P.__path__. When P itself
has a dotted name, apply this recipe recursively."
>
> See https://gist.github.com/3278829 for possible implementation.
>


Using imp and then iterating (as you suggested) is probably the fastest
solution. This is what I will do.

Thanks again.

--
http://mail.python.org/mailman/listinfo/python-list


michael.poeltl at univie

Aug 6, 2012, 11:43 PM

Post #5 of 9 (259 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

in my opinion, "without importing it" makes it unnecessarily complicated.
You just want to know it module xyz exists, or better said can be found
(sys.path).

why not try - except[ - else ]

try:
import mymodule
except ImportError:
# NOW YOU KNOW it does not exist
#+ and you may react properly
??
* Gelonida N <gelonida [at] gmail> [2012-08-06 22:49]:
> Is this possible.
>
> let's say I'd like to know whether I could import the module
> 'mypackage.mymodule', meaning,
> whther this module is located somewhere in sys.path
>
> i tried to use
>
> imp.find_module(), but
> it didn't find any module name containing a '.'
>
> Am I doing anything wrong?
>
> Is there another existing implementation, that helps.
>
> I could do this manually, but this is something I'd just like to do
> if necessary.
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list

--
Michael Poeltl
Computational Materials Physics voice: +43-1-4277-51409
Univ. Wien, Sensengasse 8/12 fax: +43-1-4277-9514 (or 9513)
A-1090 Wien, AUSTRIA cmp.mpi.univie.ac.at
-------------------------------------------------------------------------------
ubuntu-11.10 | vim-7.3 | python-3.2.2 | mutt-1.5.21 | elinks-0.12
-------------------------------------------------------------------------------
--
http://mail.python.org/mailman/listinfo/python-list


gelonida at gmail

Aug 7, 2012, 1:00 AM

Post #6 of 9 (259 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

Hi Michael,

On 08/07/2012 08:43 AM, Michael Poeltl wrote:
> in my opinion, "without importing it" makes it unnecessarily complicated.

It does, but I think this is what I want, thus my question.
I tried to keep my question simple without explaining too much.

Well now here's a little more context.


There's two reasons why I sepcified the without importing it.
Some modules may have side effects when being imported,and sometimes I
just want to check for a module's existence


Second:
Sometimes I only want to know, whether a module exists.
I do not want to know whether a module is syntactically correct or
whether a module if imported is capable of
importing all it's submodules

What I'd like to achieve at the moment is to distinguish three situations:
- a module with a given name does not exist
- a module with a given name exists and produces errors (might be
ImportErors)
- a module with a given name exists and can be imported

In fact what I really want to achieve is:
import a module if it exists (and fail if it is broken)
if it doesn't exist import a 'default' module and go on.

The name of the module is stored in a variable and is not known prior to
running the script so the code, that you suggested would be something like.


modulename = 'my.module'
cmd = 'import %s as amodule'
try:
exec(cmd)
print "imported successfully"
except ImportError:
print "module doesn't exist or the module tries to " \
"import another module that doesn't exist"
# if the module doesn't exist I'd like to import a 'fallback' module
# otherwise I'd like to abort.
except Exception as exc:
print "module exists, but is broken"
raise exc

amodule.do_something()


> You just want to know it module xyz exists, or better said can be found
> (sys.path).
>
> why not try - except[ - else ]
>
> try:
> import mymodule
> except ImportError:
> # NOW YOU KNOW it does not exist
> #+ and you may react properly
> ??
> * Gelonida N <gelonida [at] gmail> [2012-08-06 22:49]:
>> Is this possible.
>>
>> let's say I'd like to know whether I could import the module
>> 'mypackage.mymodule', meaning,
>> whther this module is located somewhere in sys.path
>>
>> i tried to use
>>
>> imp.find_module(), but
>> it didn't find any module name containing a '.'
>>
>> Am I doing anything wrong?
>>
>> Is there another existing implementation, that helps.
>>
>> I could do this manually, but this is something I'd just like to do
>> if necessary.
>>
>>
>> --
>> http://mail.python.org/mailman/listinfo/python-list

--
http://mail.python.org/mailman/listinfo/python-list


__peter__ at web

Aug 7, 2012, 1:27 AM

Post #7 of 9 (260 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

Gelonida N wrote:

> Is this possible.
>
> let's say I'd like to know whether I could import the module
> 'mypackage.mymodule', meaning,
> whther this module is located somewhere in sys.path
>
> i tried to use
>
> imp.find_module(), but
> it didn't find any module name containing a '.'

You could look for the toplevel name and then look for modules in the
corresponding directory. This is not always reliable as a package may not
correspond to a directory (e. g.: os and os.path), but I don't think you can
get any closer without performing an actual import.

--
http://mail.python.org/mailman/listinfo/python-list


rosuav at gmail

Aug 7, 2012, 2:08 AM

Post #8 of 9 (257 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

On Tue, Aug 7, 2012 at 6:00 PM, Gelonida N <gelonida [at] gmail> wrote:
> modulename = 'my.module'
> cmd = 'import %s as amodule'
> try:
> exec(cmd)
> print "imported successfully"

Someone will doubtless correct me if I'm wrong, but I think you can
avoid exec here with:

amodule=__import__(modulename)

ChrisA
--
http://mail.python.org/mailman/listinfo/python-list


maniandram01 at gmail

Aug 7, 2012, 5:40 AM

Post #9 of 9 (257 views)
Permalink
Re: find out whether a module exists (without importing it) [In reply to]

You are correct.

On 7 August 2012 14:38, Chris Angelico <rosuav [at] gmail> wrote:

> On Tue, Aug 7, 2012 at 6:00 PM, Gelonida N <gelonida [at] gmail> wrote:
> > modulename = 'my.module'
> > cmd = 'import %s as amodule'
> > try:
> > exec(cmd)
> > print "imported successfully"
>
> Someone will doubtless correct me if I'm wrong, but I think you can
> avoid exec here with:
>
> amodule=__import__(modulename)
>
> ChrisA
> --
> http://mail.python.org/mailman/listinfo/python-list
>

Python python RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.