【问题标题】:NameError: global name 'Pubnub' is not definedNameError:未定义全局名称“Pubnub”
【发布时间】:2019-01-05 21:57:04
【问题描述】:

我正在使用 cf push 在 Bluemix 上部署应用程序服务器,我收到“NameError:未定义全局名称'Pubnub'”的错误,但实际上我遇到的第一个错误是“ERR ImportError: cannot import name Pubnub”然后我在其他线程中找到了一个解决方案,他们建议将语法更改为“从 pubnub.pubnub 导入 PubNub”,因为我安装了 PubNub v4。任何想法如何解决这个问题。谢谢。下面是我的错误代码

def init():
    #Pubnub Initialization
    global pubnub 
    pubnub = Pubnub(publish_key=PUB_KEY,subscribe_key=SUB_KEY)
    pubnub.subscribe(channels='kitchenDevice-resp', callback=callback, error=callback, reconnect=reconnect, disconnect=disconnect)
    pubnub.subscribe(channels='kitchenApp-req', callback=appcallback, error=appcallback, reconnect=reconnect, disconnect=disconnect)

【问题讨论】:

  • pubnub 未定义 那么。
  • 如果你得到一个导入错误,那么这个包没有安装在你正在运行的 Python 可以找到它的地方。
  • 我是 Python 编程的新手,我怎么知道没有安装哪个包?我如何定义pubnub?谢谢
  • 您是否使用pip 安装Python 和其他Python 模块?如果是这样,在终端中输入pip list。对于 PubNub SDK,请参阅pubnub.com/docs/python/pubnub-python-sdk#how_to_get_it
  • 见下面亚当的回答。它应该提供你需要的一切。

标签: python-3.x pubnub


【解决方案1】:

看起来您正在尝试已弃用/EOL'ed,但它应该可以工作。

请确保您使用的是PubNub Python SDK v4,因为不再支持 v3,但它仍然可以工作。

如果您提供更多有用的代码(包括导入),但我强烈建议您再次尝试使用 v4 SDK,如有必要,您可以联系 PubNub 支持。

【讨论】:

【解决方案2】:

Pip 是 Python 包管理器。您可以使用它在您的机器上安装包和 SDK,以运行更好的 Python 应用程序。

要使用 Mac OS 进行安装,请在终端中使用以下命令:

easy_install pip

Installing Pip on Linux

Installing Pip on Windows

使用 pip 安装 PubNub Python v4 SDK(最新版本)。终端命令:

pip install 'pubnub>=4.1.2'

这是连接到 PubNub 并发布和订阅一个很棒的频道的代码。确保您将自己的Free PubNub API keys 放入代码中:

from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub

pubnub = PubNub(pnconfig)

def my_publish_callback(envelope, status):
    # Check whether request successfully completed or not
    if not status.is_error():
        print 'publish success'

class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass
    def status(self, pubnub, status):
        pass
    def message(self, pubnub, message):
        print message.message

pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels("awesomeChannel").execute()

## publish a message
pubnub.publish().channel("awesomeChannel").message("publish from device").pn_async(my_publish_callback)

【讨论】:

猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 2014-10-24
  • 2012-05-29
  • 2013-08-23
  • 2014-04-03
  • 2017-05-12
  • 2015-09-01
相关资源
最近更新 更多