Tomé algunas de las ideas de las otras respuestas y los convirtió en un decorador de Python @modulize
que convierte una función en un módulo. Este módulo se puede importar como de costumbre. Aquí hay un ejemplo.
@modulize('my_module')
def my_dummy_function(__name__): # the function takes one parameter __name__
# put module code here
def my_function(s):
print(s, 'bar')
# the function must return locals()
return locals()
# import the module as usual
from my_module import my_function
my_function('foo') # foo bar
El código para el decorador es el siguiente
import sys
from types import ModuleType
class MockModule(ModuleType):
def __init__(self, module_name, module_doc=None):
ModuleType.__init__(self, module_name, module_doc)
if '.' in module_name:
package, module = module_name.rsplit('.', 1)
get_mock_module(package).__path__ = []
setattr(get_mock_module(package), module, self)
def _initialize_(self, module_code):
self.__dict__.update(module_code(self.__name__))
self.__doc__ = module_code.__doc__
def get_mock_module(module_name):
if module_name not in sys.modules:
sys.modules[module_name] = MockModule(module_name)
return sys.modules[module_name]
def modulize(module_name, dependencies=[]):
for d in dependencies: get_mock_module(d)
return get_mock_module(module_name)._initialize_
El proyecto se puede encontrar here on GitHub. En particular, he creado esto para concursos de programación que solo permiten al concursante enviar un único archivo .py
. Esto le permite a uno desarrollar un proyecto con múltiples archivos .py y luego combinarlos en un solo archivo .py
al final.
La palabra que está buscando es ___mock___. Esta pregunta podría ayudar, http://stackoverflow.com/questions/295438 –