Heroku deploy error "No default language could be detected for this app."

#github上のアプリをherokuにデプロイしようとしたらエラー

````
~(省略）~

remote: Building source:
remote: 
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote:  !     No default language could be detected for this app.
remote: 			HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote: 			See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !	Push rejected to kero269map.
remote: 

~(省略）~
````
ヒントは「HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.」なので、buildpackを探しに[Buildpacks | Heroku Dev Center ](https://devcenter.heroku.com/articles/buildpacks)に飛ぶ。

#ダメだったポイント
##1. builtpackがない

ビルドパックとは、"Buildpacks are responsible for transforming deployed code into a slug,"コードをナメクジにする役割をになっているらしいので、入れないとダメらしい。ニョロ。

ビルドパックは、（Third partyものもあるらしいが）同じページにあるOfficially supported buildpacksの中から選んで使った。一度セットすれば、そのアプリでプッシュするときは、そのビルドパックを使い続けられるらしい。

`$ heroku buildpacks:set heroku/php` ←phpの場合。pythonならheroku/python
※アプリcreateの時に同時に指定することもできる。その場合は、`$ heroku create myapp --buildpack heroku/python`
※removeは　`$ heroku buildpacks:remove heroku/nodejs`

`$ heroku buildpacks:set heroku/python`したら、`Buildpack set. Next release on アプり名 will use heroku/python.Run git push heroku main to create a new release using this buildpack.`というメッセージが出たので`git push heroku main`したら、またエラーが出た。

##2. requirements.txtがない
`App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz`がでた場合をググると、[herokuで悩んだところ - Qiita]( https://qiita.com/taku_hito/items/52c6c52385386544aa62)に「これはpushするファイルの中にrequirements.txtを作成していないのが原因でした。」とあるので、ふむふむと思うが。

requirements.txtってなに？中に何を書くの？ってレベルの私は、またググーる。すると[requirements.txtについて - Qiita]( https://qiita.com/sakusaku12/items/21083c73c8afa4f6c78d)で作り方を教えてもらえる。（もちろん、デプロイしたいアプリがあるディレクトリで）以下の一行をぺろりと書けば、パッケージリストを記載したファイルを作ってもらえるのだ！

````
$ pip freeze > requirements.txt
````

※間違えてはいけないポイント。ファイル名はrequirementではなくrequirements!三単現のs必要です。
※私は、ファイル名だけ書き換えようとして、なぜだか全角で”s”と入れてしまい、その後延々と悩む羽目に…。

##3. ファイル等を変更したのにcommitしていない
色々変更したくせに、commitせずにそのまま`git push heroku main`すると、[`Duplicate build version detected`](https://devcenter.heroku.com/articles/duplicate-build-version)と怒られる。ちゃんとaddとかrmとかしてcommitする。

##４. 現在のモジューに対するdistribituionがない

ipythonやらnumpyやら、とにかく複数のモジュールで`ERROR: No matching distribution found for モジュール名`と言われてしまう。

````
ERROR: Could not find a version that satisfies the requirement traitlets==5.0.5 (from -r /tmp/build_b51bbc2a/requirements.txt (line 72)) (from versions: 0.0.1, 0.0.2, 4.0.0.dev0, 4.0.0, 4.1.0b1, 4.1.0, 4.2.0, 4.2.1, 4.2.2, 4.3.0b1, 4.3.0, 4.3.1, 4.3.2, 4.3.3.dev0, 4.3.3)
remote:        ERROR: No matching distribution found for traitlets==5.0.5 (from -r /tmp/build_b51bbc2a/requirements.txt (line 72))
````

もうやけくそで、記載のあるバージョンに変更。上の例のtraitletsなら`pip install traitlets==4.3.3`にして、requirements.txtの該当箇所を`traitlets==4.3.3`に変更。

ようやく"Deployed"の文字が見れた（涙）

＝＝
別に無理してHeroku使う必要ないんだよなぁ…と思いながら、ムキになってやってしまった。エラーメッセージを読む良い練習になったけどさ。

膝の上で寝る犬のオナラが臭い。