在 PythonAnywhere 搭建 Line Bot 聊天機器人

泥膩泥膩
6 min readFeb 8, 2023

--

因為原本的 Line Bot 是搭建在 Heroku 上面,但是 Heroku 在 2022 年底終止免費服務了,嗚嗚嗚嗚

所以就把原本在 Heroku 上面的聊天機器人移到 PythonAnywhere

  1. 首先先註冊 PythonAnywhere 的帳號,直接略過註冊的部分 XD

2. 然後到 Dashboard 打開 Bash 建立虛擬環境

# 建立虛擬環境
$ virtualenv --python=python3.10 line-bot-env

# 進入虛擬環境
$ source line-bot-env/bin/activate

# 退出虛擬環境
(line-bot-env) $ deactivate

3. 然後在點 Web 新增 web app(Web -> Add a new web app -> next -> flask -> Python3.10 -> next)

4. 再來設定 web app 的 Virtualenv,輸入你剛剛建立的虛擬環境名稱(/home/<your_pythonanywhere_id>/<your_env_name>)

5. 再來我要將我 Github Private Repos clone 到 PythonAnywhere

因為專案是 Private 的,所以 clone 的方式,可以參考:Clone A Private Repository (Github)

6. 因為 PythonAnywhere 不像 Heroku 會自動幫我們安裝 requirements.txt 的套件,所以需要自己安裝

# 記得先進到虛擬環境
$ source line-bot-env/bin/activate

# 命令列前面有出現你的虛擬環境名稱就代表有成功進到虛擬環境
(line-bot-env) $

# 接著安裝相關套件
(line-bot-env) $ pip install -r requirements.txt

7. 接著去 LINE Developers 修改你的 LINE callback 網址

https://<your_pythonanywhere_account>.pythonanywhere.com/callback

醬子就搞定啦

*備註一下,我在佈署時遇到的傻眼 error

因為我的專案有使用到 configparser,在佈署時一直出現這個錯誤

2023-02-08 01:02:16,882: Error running WSGI application
2023-02-08 01:02:16,883: KeyError: 'LINE_BOT'
2023-02-08 01:02:16,883: File "/var/www/xxxxx_pythonanywhere_com_wsgi.py", line 16, in <module>
2023-02-08 01:02:16,883: from run import app as application # noqa
2023-02-08 01:02:16,883:
2023-02-08 01:02:16,883: File "/home/xxxxx/LINE-bot/run.py", line 45, in <module>
2023-02-08 01:02:16,883: line_bot_api = get_config.get_value('LINE_BOT', 'line_bot_api')
2023-02-08 01:02:16,883:
2023-02-08 01:02:16,884: File "/home/xxxxx/LINE-bot/get_config.py", line 16, in get_value
2023-02-08 01:02:16,884: variable = config[section][option]
2023-02-08 01:02:16,884:
2023-02-08 01:02:16,884: File "/usr/local/lib/python3.10/configparser.py", line 964, in __getitem__
2023-02-08 01:02:16,884: raise KeyError(key)

後來我東查西查,上查下查,終於找到原因了 -.-

大家有興趣的話,可以測試下面程式 XD

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
print("我現在在哪裡", os.getcwd())
print("我的下面有:", os.listdir(os.getcwd()))
return 'Hello from Flask!'

#---
#2023-02-07 12:15:49 announcing my loyalty to the Emperor...
#2023-02-07 12:15:50 我現在在哪裡 /home/xxxxx
#2023-02-07 12:15:50 我的下面有: ['.virtualenvs', 'LINE-bot-project', '.viminfo', '.gitconfig', '.python_history', '.bash_history', 'README.txt', '.vimrc', '.local', '.pythonstartup.py', '.bashrc', '.cache', '.profile', '.vim', 'line-bot-env']

原來是路徑的問題QQ

原來是路徑的問題QQ

原來是路徑的問題QQ

(傻眼)

因為原本在 Heroku 的環境,佈署上去後,吃的路徑就是專案底下的目錄。但在 PythonAnywhere 的環境,吃的路徑是專案目錄的上層路徑。

所以改一下 config.ini 的路徑

import configparser

cofig = configparser.ConfigParser()
if config.read('/home/xxxxx/LINE-bot-project/config.ini') == []:
print('error')
else:
variable = config [section][option]

醬子就搞定啦

--

--

泥膩泥膩
泥膩泥膩

Written by 泥膩泥膩

快解除我的封印RRRRRRRR~~~~

No responses yet