- 首先先註冊 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]
醬子就搞定啦