2016-04-09 23 views
0

好,所以我想使用crossbar.io並在python中構建一個應用程序。導入pycurl crossbar.io錯誤出

我可以使演示工作,但我的應用程序將需要脫離使用pycurl來聽取長壽命http連接的線程。

單獨的crossbar.io代碼和pycurl代碼工作,但是當我這樣做,我得到「進口未找到」:

import sys 
from twisted.internet.defer import inlineCallbacks 
from twisted.logger import Logger 

from autobahn.twisted.util import sleep 
from autobahn.twisted.wamp import ApplicationSession 
from autobahn.wamp.exception import ApplicationError 

from legacy_misc import Legacy_Listener 

client = Legacy_Listener("box01") 
client.daemon = True 
client.start() 

class AppSession(ApplicationSession): 

log = Logger() 
@inlineCallbacks 
def onJoin(self, details): 

    # SUBSCRIBE to a topic and receive events 
    # 
    def onhello(msg): 
     self.log.info("event for 'onhello' received: {msg}", msg=msg) 

    yield self.subscribe(onhello, 'com.example.onhello') 
    self.log.info("subscribed to topic 'onhello'") 

    # REGISTER a procedure for remote calling 
    # 
    def add2(x, y): 
     self.log.info("add2() called with {x} and {y}", x=x, y=y) 
     return x + y 

    yield self.register(add2, 'com.example.add2') 
    self.log.info("procedure add2() registered") 

    # PUBLISH and CALL every second .. forever 
    # 
    counter = 0 
    while True: 

     # PUBLISH an event 
     # 
     yield self.publish('com.example.oncounter', counter) 
     self.log.info("published to 'oncounter' with counter {counter}", 
         counter=counter) 
     counter += 1 

     if counter > 5: 
      break 

     # CALL a remote procedure 
     # 
     try: 
      res = yield self.call('com.example.mul2', counter, 3) 
      self.log.info("mult() called with result: {result}", 
          result=res) 
     except ApplicationError as e: 
      # ignore errors due to the frontend not yet having 
      # registered the procedure we would like to call 
      if e.error != 'wamp.error.no_such_procedure': 
       raise e 

     yield sleep(1) 

的legacy_Listener包含線程代碼以「進口pycurl」 (該模塊本身的偉大工程)

現在,一旦我有我自己的代碼混合crossbar.io示例代碼中,我得到以下錯誤:

2016-04-09T20:42:09+0100 [Container 26333] Worker process starting (PyPy-EPollReactor) .. 

2016年4月9日T20:42:13 + 0100 [控制器26219] ID爲'worker2'且PID爲26333的容器啓動 2016-04-09T20:42:13 + 0100 [容器26333]組件加載失敗 回溯(最近一次調用最後一次): 文件「/opt/crossbar/site-packages/autobahn/wamp/websocket.py」,第90行,onMessage self._session.onMessage(msg) 文件「/ opt/crossbar/site-packages/autobahn/wamp/on_primary = txaio.as_future(endpoint.fn,* invoke_args,** invoke_kwargs) 文件「/opt/crossbar/site-packages/txaio/tx.py」,行339,第809行,onMessage on_reply = as_future return maybeDeferred(fun,* args,** kwargs) 文件「/opt/crossbar/site-packages/twisted/internet/defer.py」,第150行,位於maybeDeferred result = f(* args ,** kw) --- --- 文件「/opt/crossbar/site-packages/crossbar/worker/container.py」,第192行,在start_container_component中 create_component = _appsession_loader(config) 文件「/ opt/crossbar/site-packages/crossbar/worker/init .py「,第74行,在_appsession_loader中 pythonpath = sys.path autobahn.wamp.exception.ApplicationError:ApplicationError(error =,args = ['導入失敗class \'hello.AppSession \'\ nTraceback(最近一次調用最後一次):\ n在onMessage \ n on_reply = txaio文件「/opt/crossbar/site-packages/autobahn/wamp/protocol.py」,第809行。 as_future(endpoint.fn,* invoke_args,** invoke_kwargs)\ n在as_future文件「/opt/crossbar/site-packages/txaio/tx.py」,第339行,返回maybeDeferred(fun,* args,** kwargs)\ n文件「/ opt/crossbar/site-packages /twisted/internet/defer.py「,第150行,在maybeDeferred \ n result = f(* args,** kw)\ n文件」/opt/crossbar/site-packages/crossbar/worker/container.py「,第192行,在start_container_component \ n create_component = _appsession_loader(config)\ n --- --- \ n文件「/ opt/crossbar/site-packages/crossbar/worker/init .py」,line 58,in _appsession_loader \ n模塊= importlib.import_module(module_name)\ n文件「/opt/crossbar/lib-python/2.7/importlib/ init .py」,第37行,in import_module \ n import(name)\ n File 「/home/osboxes/qbtwebmon/hello.py」,第36行,位於\ n從legacy_misc導入Legacy_Listener \ nexceptions.ImportError:沒有名爲legacy_misc \ n'的模塊,kwargs = {'pythonpath':[u'/ home/「/ opt/crossbar/bin」,「/ opt/crossbar/lib_pypy/個擴展','/ opt/crossbar/lib_pypy','/opt/crossbar/lib-python/2.7','/opt/crossbar/lib-python/2.7/lib-tk','/ opt/crossbar/lib/python/2.7/plat-linux2','/ opt/crossbar/site-packages','/ home/osboxes/qbtwebmon/wamp_venv/lib/python2。7/site-packages']},enc_algo = None)

2016-04-09T20:42:13 + 0100 [Container 26333] Python模塊搜索路徑: 2016-04-09T20:42:13 + 0100 [容器26333]/home/osboxes/qbtwebmon 2016-04-09T20:42:13 + 0100 [容器26333]/opt/crossbar/site-packages/crossbar/worker 2016-04-09T20:42:13 + 0100 [容器26333]/opt/crossbar/bin 2016-04-09T20:42:13 + 0100 [Container 26333]/opt/crossbar/lib_pypy/extensions 2016-04-09T20:42:13 + 0100 [Container 26333 ]/opt/crossbar/lib_pypy 2016-04-09T20:42:13 + 0100 [Container 26333] /opt/crossbar/lib-python/2.7 2016-04-09T20:42:13 + 0100 [Container 26333] /選擇/ CR ossbar/lib-python/2.7/lib -tk 2016-04-09T20:42:13 + 0100 [Container 26333] /opt/crossbar/lib-python/2.7/plat-linux2 2016-04-09T20:42: 13 + 0100 [Container 26333]/opt/crossbar/site-packages 2016-04-09T20:42:13 + 0100 [Container 26333] /home/osboxes/qbtwebmon/wamp_venv/lib/python2.7/site-packages 2016-04-09T20:42:13 + 0100 [容器26333] NativeWorkerSession.onUserError 2016-04-09T20:42:13 + 0100 [控制器26219] crossbar.error.class_import_failed:未能導入類'hello.AppSession' Traceback(最近調用最後一次): 文件「/opt/crossbar/site-packages/autobahn/wamp/protocol.py」,第809行,onMessage on_reply = txaio.as_future(endpoint.fn,* invoke_args,** invoke_kwargs) 文件「/ opt/crossbar/site-packag es/txaio/tx.py「,第339行,as_future return maybeDeferred(fun,* args,** kwargs) 文件」/opt/crossbar/site-packages/twisted/internet/defer.py「,第150行,inDeferred result = f(* args,** kw) start_container_component中的文件「/opt/crossbar/site-packages/crossbar/worker/container.py」,第192行 create_component = _appsession_loader(config) - - --- 文件「/ opt/crossbar/site-packages/crossbar/worker/init .py」,line 58,in _appsession_loader module = importlib.import_module(module_name) File「/ opt/crossbar/lib-python/2.7/importlib/init .py「,第37行,在import_module 進口(名) 文件 「/home/osboxes/qbtwebmon/hello.py」 36行,在 從legacy_misc進口Legacy_Listener exceptions.ImportError:無模塊名爲legacy_misc

2016-04-09T20: 42:13 + 0100 [控制器26219]將TERM發送給子進程26272 2016-04-09T20:42:13 + 0100 [控制器26219]等待26272退出...

現在經過幾個小時的谷歌搜索,意識到pycurl不能在pypy中工作,這是crossbar.io的運行方式,但我想知道是否有一種方法可以說「使用pypy」來運行交叉開關,「使用cpython」來運行該項目?

最後,這不是一個路徑問題,我已附加並測試它。

回答

0

確定固定,基本上我使用「yum install crossbar」方法來安裝它是用pypy編寫的。如果你通過pip安裝,它會給你CPython的版本,它比pypy版本的恕我直言更快。

注意:pip install crossbar [all]是一種痛苦,你修復一個編譯問題,然後再編譯一個,只需要執行標準的pip install crossbar。