MacでPythonをcron実行するのにつまづいた話

スポンサーリンク

タイトルの通り、Python3をcron実行しようとしたらつまづいたのでやり方を書き残しておきます。

以下のトラブルがありましたが、無事動くようになりました。

  • コードに日本語が含まれていてエラーになる
  • Python3で実行されず、Python2.7で実行される

まず、cronを動かすのに参考にしたサイトはこちら。

スポンサーリンク

参考サイト

【保存版】cronでPython3を定時実行する方法&注意すべき4つのポイント
こんにちは、ライフハックブロガーのたぬ(@tanuhack)です! 「作ったPythonのプログラムが、ある決まった時間に自動で実行されればなあ…」 Macのcron(クーロン)という機能を使えば可能です!! [asid ...

結論から言うと、私のMacではPython3をインストールしていなかったのでこの通りにはできませんでした。(いつもVSCode上のデバックで動かしていたので気づきませんでした)

そのため、記事中の「ターミナル上ではPython3が動いている」←この部分で引っかかっていました。

自分のターミナル上でPythonのバージョンを確認すると、やはりPython2.7がインストールされていました。

MacにインストールされているPythonのバージョンを確認するには

ターミナルで Python –version と打ち込む

Python3をMacで使用できるようにする

python3をデフォルトで使えるようにする必要がありました。

下のサイトを参考にPython3をインストール&.bash_profile&.bashrcを設定

下記サイトで全部説明されていたのでこの通りに。

【Python3】まっさらなMacにPythonの最新バージョンをインストールする手順まとめ
はいどうもこんにちは、20代怠け者(@20sInvest)です! 最近、プログラミングの勉強ということでPython3を再勉強してまして、自前のMacBookにPython3をインストールしました。

.bash_profile&.bashrcmの設定方法がわからなかったので追記しておきます。

.bashrcの設定

./bashrc設定画面に遷移

.bashrcを設定するには、ターミナルで

vi ~/.bashrc

と入力しエンターキーを押します。

./bashrcにコマンド入力

bashrcを編集できる画面になりました。この画面はviエディタという編集画面なので、馴染みがないコマンドを打つことになります。

i(アイ)ボタンを押すと文字を打てるようになります。

ここで画像の通り入力します。

alias python=python3
alias pip=pip3

./bashrcの編集を終える

./bashrcの編集を終えるには、「esc」キーを押してインサートモードを終了します。

次に、

:wq

と打ち込みます。(「:wq」は自動的に一番下の行に入力されます)

エンターキーを押すと、bashrcの設定を保存し元のターミナルの画面に戻ります。

.bash_profileの設定

.bash_profileの画面遷移、保存の方法は上のbashrcと同じです。

/.bash_profile設定画面に遷移

ターミナルで

vi ~/.bash_profile

を入力しエンターキーを押します。

/.bash_profileを入力したところ

/.bash_profileにコマンド入力

こちらもviエディタなので、「i」を打ってからコマンドを入力します。

source ~/.bashrc

とコマンドを入力しました。

bash_profileを保存して終了

「esc」を押して「:wq」と入力してエンターキーでターミナルに戻ります。

これで、macのデフォルトでpython3を使えるようになりました!確認してみます

ちゃんとpython3.8.3になりました。

cronで動かしたpythonでは、version2.7を吐いてしまう

macのデフォルトではpython3を使えるようになりましたが、

cronで設定した”hello”でプリントすると、version2.7とプリントされてしまいます。

このトラブルも、下記サイトで解決しました。

【Python3】Crontabを使ってMacでPythonを自動実行する設定方法と注意点まとめ【フルパス付き】
はいどうもこんにちは、20代怠け者(@20sInvest)です! 先日から、MacにPython3を導入する方法や備忘録・メモなどをこのブログにまとめています。 こちらの記事もご覧ください 【Pyth

Pythonをフルパスで指定したら出来た

cronの設定で「python」とだけ入力していましたが、

PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
LANG=ja_JP.UTF-8
41 0 * * * python /Users/user/Desktop/hello.py > /Users/user/Desktop/exec-error.log 2>&1

pythonをフルパス「/Library/Frameworks/Python.framework/Versions/3.8/bin/python3」と入力したらうまくいきました。

PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
LANG=ja_JP.UTF-8
48 0 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/user/Desktop/hello.py > /Users/user/Desktop/exec-error.log 2>&1

日本語がプログラム中にあるとエラーが出る

cronにLANG=ja_JP.UTF-8と追記しましたが、エラーが出てしまっていました。

これはpythonの1行目に

# coding:UTF-8

と入力したら解決しました。

まとめ

参考にしたサイトはどれもとても分かりやすかったのですが、自分の設定と異なっていたのと知識がなく戸惑ってしまいました。

無事、cronでpython3を実行できるようになりました!

SMBC日興証券の注文中リストをPythonでCSVとして取り込む
PythonのスクレイピングでSMBC日興証券の注文中リストをCSVに出力できるようにしました。優待クロスをしていると注文を繰り返すことになるので便利に使えています。取り込みイメージSMBC日興証券にログイン後、信...