SpringPython错误:AttributeError:'module'对象没有属性'ObjBase

0 投票
1 回答
1602 浏览
提问于 2025-04-16 05:12

我买了《Spring Python 1.1》这本书,但遇到了一些解决不了的问题。我打算把每个文件的代码都写出来,以确保大家能明白。如果你们中有人知道问题出在哪里,请告诉我,因为我真的很着急。

这是我的第一个文件:simple_service.py

class Service(object):
def happy_birthday(self, name):
    results = []
    for i in range(4):
        if i <= 2:
            results.append("Happy birthday dear %s!" % name)
        else:
            results.append("Happy birthday to you!")
            return results

这是第二个文件:simple_service_server_ctx.py

from springpython.config import *
from springpython.remoting.pyro import *

from simple_service import *

class HappyBirthdayContext(PythonConfig):
    def __init__(self):
        PythonConfig.__init__(self)

    @Object
    def target_service(self):
        return Service()

    @Object
    def service_exporter(self):
        exporter = PyroServiceExporter()
        exporter.service = self.target_service()
        exporter.service_name = "service"
        exporter.service_host = "127.0.0.1"
        exporter.service_port = "7766"
        exporter.after_properties_set()
        return exporter

这是第三个文件:simple_server.py

from springpython.context import *
from simple_service_server_ctx import *

if __name__ == "__main__":
    ctx = ApplicationContext(HappyBirthdayContext())
    ctx.get_object("service_exporter")

我在终端运行了:python simple_server,然后出现了以下错误:

(spring)kiko@kiko-laptop:~/examples/spring$ python simple_server.py 
Traceback (most recent call last):
  File "simple_server.py", line 6, in <module>
    ctx = ApplicationContext(HappyBirthdayContext())
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/context/__init__.py", line 45, in __init__
    self.get_object(object_def.id, ignore_abstract=True)
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/container/__init__.py", line 80, in get_object
    comp = self._create_object(object_def)
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/container/__init__.py", line 129, in _create_object
    self._get_constructors_kw(object_def.named_constr))
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/factory/__init__.py", line 62, in create_object
    return self.method()
  File "<string>", line 2, in service_exporter
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/config/__init__.py", line 1370, in object_wrapper
    return _object_wrapper(f, theScope, parent, log_func_name, *args, **kwargs)
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/config/__init__.py", line 1350, in _object_wrapper
    return _deco(f, scope, parent, log_func_name, *args, **kwargs)
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/config/__init__.py", line 1345, in _deco
    results = f(*args, **kwargs)
  File "/home/kiko/examples/spring/simple_service_server_ctx.py", line 22, in service_exporter
    exporter.after_properties_set()
  File "/home/kiko/.virtualenvs/spring/lib/python2.6/site-packages/springpython/remoting/pyro/__init__.py", line 58, in after_properties_set
    pyro_obj = Pyro.core.ObjBase()
AttributeError: 'module' object has no attribute 'ObjBase'

我自己在文件simple_service_server_ctx.py中添加了这一行:

exporter.after_properties_set()

因为我看到必须声明这一行(第19行,源代码链接)。

提前谢谢大家。

1 个回答

1

我想知道你用的是什么版本的Pyro。在我这边,使用的是Ubuntu 10.04上的Pyro 3.9.1-1,运行你的代码没有任何问题。你是不是在用Pyro 4.x?我记得这个版本是在书出版之后才发布的。

撰写回答