在使用谷歌云平台时,但在本地运行时,获取“NameError:name'Twitter'未定义”

2024-09-30 22:09:45 发布

您现在位置:Python中文网/ 问答频道 /正文

Here's the link to the repository for my code。 如果你不想进入回购协议的其余部分,这里有一个主要文件存在问题

import yaml
from twitter import *
from datetime import datetime
import sys
import time
from flask import Flask 
app = Flask(__name__)
# sys.path.append(".")

#the part where you figure out how many days are left
def calculate_dates():
    now = datetime.now()
    gradDay = datetime(2020, 5, 15)
    return (gradDay - now.today()).days + 1

# new_status = 'happy ' + str(calculate_dates()) + ' days until grad'
new_status = 'test3'

with open("config.yml", 'r') as ymlfile:
    cfg = yaml.safe_load(ymlfile)

#this is the method i used when it was just the flask app running locally
# while True:
#     if (datetime.now().hour is 9 and datetime.now().minute is 0 and datetime.now().second is 0):
#         twitter = Twitter(auth = OAuth(cfg['twitterkeys']['access_token_key'],
#                   cfg['twitterkeys']['access_token_secret'],
#                   cfg['twitterkeys']['consumer_key'],
#                   cfg['twitterkeys']['consumer_secret']))
#         results = twitter.statuses.update(status = new_status)
#         time.sleep(5)
# # print("updated status: %s" % new_status)

@app.route("/")
def main():
    return "hello"

@app.route("/tweet")
def tweet():
    twitter = Twitter(auth = OAuth(cfg['twitterkeys']['access_token_key'],
                  cfg['twitterkeys']['access_token_secret'],
                  cfg['twitterkeys']['consumer_key'],
                  cfg['twitterkeys']['consumer_secret']))
    results = twitter.statuses.update(status = new_status)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

到目前为止,我一直在推特上说,我每天手动毕业还有多少天,只是为了好玩(并提醒自己毕业前要玩得开心),一位朋友建议我将其自动化。起初,我在我的电脑上运行Flask应用程序,我的代码中有一些东西,可以在每天早上9点在推特上显示剩余的天数,但我想把它放在GCP上,这样我就不必永远在本地运行它了。当我在本地运行Flask应用程序时,一切都很好,它会在推特上发布出来

现在,我已经设置了这个Python Flask应用程序,以便在访问/tweet路径时,它会在tweet上显示离弗吉尼亚理工大学毕业还有多少天。在GCP上,我做了一个cron任务,在正确的时间访问/tweet发送tweet(目前在回购协议中,它没有设置为上午9点,因为我正在测试它,当时我发现了错误)

当cron作业的执行时间到来时,我得到一个错误,它失败了


NameError: name 'Twitter' is not defined

        at tweet (/srv/main.py:38)
        at dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1935)
        at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1949)
        at reraise (/env/lib/python3.7/site-packages/flask/_compat.py:39)
        at handle_user_exception (/env/lib/python3.7/site-packages/flask/app.py:1820)
        at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1951)
        at wsgi_app (/env/lib/python3.7/site-packages/flask/app.py:2446)

最初,我的虚拟环境名为“twitter”因此,通过另一个关于类似问题的在线帖子,我认为它可能将twitter软件包与其中的内容混淆。重命名它没有帮助。我尝试重新安装twitter软件包,但也没有帮助。不确定下一步要尝试什么。我认为这与我如何设置Flask无关,因为如果我在本地运行此版本然后移动到/tweet,它会发出一条tweet

有什么建议吗

编辑:我意识到我没有按照“pip install-t lib-r requirements.txt”命令将库复制到lib文件夹中,只是尝试了一下,没有改变我的错误

还有69天就要毕业了


Tags: pyimportenvappflaskdatetimelibstatus