Size: 1213
Comment:
|
Size: 2028
Comment: Fixed non-WikiWords.
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
I frequently want to find all the modules in some directory, with some property, and do something with them. | Here's how to find all the modules in some directory, and import them. |
Line 3: | Line 3: |
If you know how, please inform me. Here are some things I'm researching. | [[TableOfContents()]] == Finding Modules in a Directory == Is there a better way than just listing the contents of the directory, and taking those tiles that end with ".pyc" or ".py"..? But perhaps there isn't. {{{ #!python import os import sets def find_modules(path="."): """Return names of modules in a directory. Returns module names in a list. Filenames that end in ".py" or ".pyc" are considered to be modules. The extension is not included in the returned list. """ modules = sets.Set() for filename in os.listdir(path): module = None if filename.endswith(".py"): module = filename[:-3] elif filename.endswith(".pyc"): module = filename[:-4] if module is not None: s.add(module) return list(modules) }}} == Importing the Modules == How do you import a module, once you have it's name? With the ImpModule! It dynamically loads named modules. {{{ #!python import imp def load_module(name, path=["."]): """Return a named module found in a given path.""" (file, pathname, description) = imp.find_module(name, path) return imp.load_module(name, file, pathname, description) modules = [load_module(name) for name in find_modules()] }}} |
Line 6: | Line 54: |
Once you have your module, you can look inside it, with {{{.__dict__}}}. |
|
Line 12: | Line 62: |
== Identifying Functions == {{{ #!python import types def is_it_a_function(obj): return isinstance(obj, types.FunctionType) }}} |
|
Line 24: | Line 64: |
So, putting them together,... | We just look for dictionary values that are of type {{{types.FunctionType}}}. |
Line 36: | Line 76: |
== Finding Modules in a Directory == | == See Also == |
Line 38: | Line 78: |
Is there a better way than just listing the contents of the directory, and taking those tiles that end with ".pyc" or ".py"..? | The DocXmlRpcServer page includes code demonstrating the use of these techniques. |
Line 40: | Line 80: |
== Importing the Modules == | = Discussion = |
Line 42: | Line 82: |
How do you do it dynamically, just given a filename? Once you've imported it, how do you get a handle on it? (That is, how do you get it's __dict__?) There seems to be [http://www.python.org/doc/current/lib/module-imp.html a module imp] that can be used to dynamically load a named module. |
(none yet!) |
Here's how to find all the modules in some directory, and import them.
Finding Modules in a Directory
Is there a better way than just listing the contents of the directory, and taking those tiles that end with ".pyc" or ".py"..?
But perhaps there isn't.
1 import os
2 import sets
3
4 def find_modules(path="."):
5 """Return names of modules in a directory.
6
7 Returns module names in a list. Filenames that end in ".py" or
8 ".pyc" are considered to be modules. The extension is not included
9 in the returned list.
10 """
11 modules = sets.Set()
12 for filename in os.listdir(path):
13 module = None
14 if filename.endswith(".py"):
15 module = filename[:-3]
16 elif filename.endswith(".pyc"):
17 module = filename[:-4]
18 if module is not None:
19 s.add(module)
20 return list(modules)
Importing the Modules
How do you import a module, once you have it's name?
With the ImpModule! It dynamically loads named modules.
Finding the Things Inside a Module
Once you have your module, you can look inside it, with .__dict__.
1 module.__dict__
Finding Functions Within a Module
We just look for dictionary values that are of type types.FunctionType.
See Also
The DocXmlRpcServer page includes code demonstrating the use of these techniques.
Discussion
- (none yet!)