推送被拒绝,无法编译Python应用程序 - Python版本错误

时间:2018-05-08 09:24:05

标签: python heroku

我过去曾使用过Heroku和PHP,但这是我第一次将Heroku与Python和Flask结合使用。首先,我想创建一个简单的“Hello World”应用程序,然后上传我构建的更复杂的程序。因此,项目的文件夹包含以下内容:

  • 一个“Hello World”Python脚本(称为Main.py):

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    @app.route("/")
    def index():
        return render_template("index.html", message="Hello World")
    
    if __name__ == "__main__":
        app.run(debug=True)
    
  • 其中包含templates个文件(见上文)的index.html个文件

  • 一个runtime.txt个文件:

    python-3.6.5
    
  • 一个requirements.txt个文件:

    Flask==1.0.1
    

(该项目最初位于/Users/User/PycharmProjects/Project_HelloWorld。)

但是,当我在终端输入git push heroku master时,我收到以下错误:

Counting objects: 85, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (82/82), done.
Writing objects: 100% (85/85), 5.01 MiB | 3.13 MiB/s, done.
Total 85 (delta 24), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote:  !     The latest version of Python 3 is python-3.6.5 (you are using {\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
remote: {\fonttbl\f0\fmodern\fcharset0 Courier;}
remote: {\colortbl;\red255\green255\blue255;\red43\green47\blue49;\red237\green237\blue244;}
remote: {\*\expandedcolortbl;;\cssrgb\c21961\c24314\c25098;\cssrgb\c94510\c94510\c96471;}
remote: \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
remote: \deftab720
remote: \pard\pardeftab720\partightenfactor0
remote: 
remote: \f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0
remote: python-3.6.5}, which is unsupported).
remote:  !     We recommend upgrading by specifying the latest version (python-3.6.5).
remote:        Learn More: https://devcenter.heroku.com/articles/python-runtimes
remote: -----> Installing {\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
remote: {\fonttbl\f0\fmodern\fcharset0 Courier;}
remote: {\colortbl;\red255\green255\blue255;\red43\green47\blue49;\red237\green237\blue244;}
remote: {\*\expandedcolortbl;;\cssrgb\c21961\c24314\c25098;\cssrgb\c94510\c94510\c96471;}
remote: \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
remote: \deftab720
remote: \pard\pardeftab720\partightenfactor0
remote: 
remote: \f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0
remote: python-3.6.5}
remote:  !     Requested runtime ({\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
remote: {\fonttbl\f0\fmodern\fcharset0 Courier;}
remote: {\colortbl;\red255\green255\blue255;\red43\green47\blue49;\red237\green237\blue244;}
remote: {\*\expandedcolortbl;;\cssrgb\c21961\c24314\c25098;\cssrgb\c94510\c94510\c96471;}
remote: \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
remote: \deftab720
remote: \pard\pardeftab720\partightenfactor0
remote: 
remote: \f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0
remote: python-3.6.5}) is not available for this stack (heroku-16).
remote:  !     Aborting.  More info: https://devcenter.heroku.com/articles/python-support
remote:  !     Push rejected, failed to compile Python app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !   Push rejected to evening-sierra-26101.
remote: 
To https://git.heroku.com/evening-sierra-26101.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/evening-sierra-26101.git'

如何解决此错误并在Heroku上正确运行我的应用程序?

当我在上面的cat runtime.txt的终端输入runtime.txt时,我得到以下(非常意外?)输出:

{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
{\fonttbl\f0\fmodern\fcharset0 Courier;}
{\colortbl;\red255\green255\blue255;\red43\green47\blue49;\red237\green237\blue244;}
{\*\expandedcolortbl;;\cssrgb\c21961\c24314\c25098;\cssrgb\c94510\c94510\c96471;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\deftab720
\pard\pardeftab720\partightenfactor0

\f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0
python-3.6.5}%

我首先在python-3.6.4中使用runtime.txt(而不是python-3.6.5)尝试了它,但我得到了同样的错误。

2 个答案:

答案 0 :(得分:3)

首先,我要弄清楚如何使用gunicorn运行您的应用,因为它是Flask应用最常见的部署服务器。要使用gunicorn运行应用程序,您应该能够pip install gunicorn,然后从项目的根目录运行:gunicorn my_file_name:app,其中my_file_name ==包含上述Flask代码的文件的名称。例如。如果您的Flask代码位于名为app.py的文件中,则您需要运行gunicorn app:app

一旦您可以使用gunicorn运行应用程序,请创建一个Procfile,指定您希望Heroku使用gunicorn运行服务器。这里是Procfile的内容,它应该位于项目文件的根目录中(与requirements.txt相同的目录):

web: gunicorn app:app

然后我更新requirements.txt。执行pip freeze | grep gunicorn获取gunicorn版本,然后将其添加到requirements.txt文件中:

Flask==1.0.1
gunicorn==19.7.1

最后,要解决上述错误的直接原因,我将runtime.txt设置为:

python-3.6.4

然后git push heroku master 能够让你去......

如果所有其他方法都失败了,here's a simple repository在README中有一个带有Heroku部署说明的准系统Flask应用程序。它已部署在此处:https://myapp-name-1.herokuapp.com/

答案 1 :(得分:1)

所以我发现它出了什么问题,现在我的“Hello World”可以在Heroku上正常运行。

问题在于,即使我重新创建runtime.txt文件和requirements.txt由于某种原因,在正确的文本之前插入了以下“文本”:

\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200
remote: {\fonttbl\f0\fmodern\fcharset0 Courier;}
remote: {\colortbl;\red255\green255\blue255;\red43\green47\blue49;\red237\green237\blue244;}
remote: {\*\expandedcolortbl;;\cssrgb\c21961\c24314\c25098;\cssrgb\c94510\c94510\c96471;}
remote: \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
remote: \deftab720
remote: \pard\pardeftab720\partightenfactor0
remote: 
remote: \f0\fs26 \cf2 \cb3 \expnd0\expndtw0\kerning0

当我在我的应用中尝试git push heroku master以及进入cat runtime.txt时,我在上面发布的错误中显示了这一点。我终于通过使用Hex编辑器发现了这一点。因此,Heroku不仅在我的python-3.6.4中阅读runtime.txt,而且在实际阅读python-3.6.4.之前,我在上面发布了所有这些内容,这就是我收到错误的原因。

正如@Chris在评论中注意到的那样,这个不必要的“文本”被添加(出于某种原因),因为我的.txt文件首先被保存(出于某种原因).txt.rtf然后我手动将扩展名更改为.txt,而没有考虑到更多内容已保存在其中,即使我更改了扩展程序。我使用Hex编辑器删除了所有这些不必要的“文本”,现在一切正常。