[macOS] 31 crontabの設定

[macOS Big Sur 11.6.1]

M1 Mac miniでcrontab(定時実行のスケジュール管理ツール)の設定に手間取ったのでメモ書き。Intel Mac miniの時も設定したはずですが、すっかり忘れていました。

crontabのログは/var/mail/[ユーザー名]に記録されています。

今回そこには”Operation not permitted”と記されていました。

その場合はシステム環境設定 “セキュリティとプライバシー”のフルディスクアクセスをcronに許可します。cronファイルは/usr/sbin/cronにあります。

[Python] 314 ライブラリlxmlはpipにて現状未対応[Apple Silicon][付録:cron用シェルスクリプト]

PyPIのpandasはようやくM1 Macに対応しましたが、関連するライブラリであるlxmlは2021年11月6日現在、未対応です。lxmlはpandas.read_htmlを使う際に必要になります。

そのためBeautifulSoupで取り込んだデータからの抽出ができません。pandasでhtmlを扱わないようコードを書き換える必要があります。なおminiforge環境ではcondaコマンドでインストール可能です。

今回はpyenvにminiforgeの仮想環境を作成し、そこにcondaでlxml等をインストールしました。crontabによりpythonスクリプトを定時実行する場合はシェルスクリプトファイルに以下のように記述しています。pyenvでなくても直接homeディレクトリにminiforgeをインストールして問題ないでしょう。

# pyenv内miniforge環境 miniforge3-4.10.1-5の場合
/Users/[ユーザー名]/.pyenv/versions/miniforge3-4.10.1-5/bin/python [pyファイルのフルパス]

# miniforge内仮想環境 mini_3.10.0の場合
/Users/[ユーザー名]/miniforge3/envs/mini_3.10.0/bin/python [pyファイルのフルパス]

どうもpandas関連の開発元はAppleに対してあまり協力的ではないようです。同様に配列を扱うライブラリであるnumpyは2021年6月には対応していて比較的親Appleです。

私自身、使い勝手の良いpandasに依存している状況は良くないと感じています。昨年11月、M1 Macを早々に手放した原因にもなりましたから。今後のことを考え、numpyをメインに据えて今使っているコードを書き換えられないか模索してみます。