概要
さくらインターネットで自動実行するpythonプログラムをcronで動かそうとしたところ、
モジュールがインポートされてない!という問題が起こりました。
いろいろ試行錯誤してモジュールのインポートが出来たのでメモとして残します。
環境
さくらインターネットの環境は以下です
- さくらインターネット 共用サーバー
- FreeBSD
- Python 3.8.12
さくらインターネットのモジュール状況(2026/2)
レンタルサーバーにログインして
サーバー情報→Python情報でモジュールを見てみる

はい、見事にpipもnumpyもpandasも無いですね。まじですか。
pipが無いのでモジュールの追加ができません。

①pipのインポート
1.コマンドプロンプトを開いて、SSHでサーバーにアクセス
@の前はFTPアカウント、@の後ろはFTPサーバーを入力
※FTPアカウント、FTPサーバーは サーバー情報→FTP設定情報 で確認
ssh *****@*****.sakura.ne.jpログインパスワードを聞かれるので、入力(文字は非表示なので打ち間違いに注意)
以下が出力されたら成功です。
Welcome to FreeBSD!2.pipインストール
以下のコードを実施(さくらインターネットはpython3.8なのでバージョンを指定)
curl https://bootstrap.pypa.io/pip/3.8/get-pip.py -o get-pip.py
python get-pip.py --user3.PATHを通す
echo 'setenv PATH $HOME/.local/bin:$PATH' >> ~/.cshrc
source ~/.cshrc4.確認
以下のコマンドを実行して、バージョンが出力されたら成功です
pip --version
②pandasのインポート
■失敗原因
さくら共用サーバーでは /var/tmp が noexec でマウントされている。pipが一時ファイルを作成できない。
■解決方法
自分のホームディレクトリにtmpを作り、環境変数を指定してインストール:
1.作業ディレクトリの作成
mkdir -p ~/tmp2.環境変数 TMPDIR を指定して実行
setenv TMPDIR $HOME/tmp
python -m pip install --user pandasうまくいくとこうなります。

③cron実行で「ModuleNotFoundError」が出る
■エラー内容
ModuleNotFoundError: No module named 'pandas'
■失敗原因
- cronはログイン時の環境変数を読み込まない。
.localが PYTHONPATH に入っていない。
■解決方法
cronコマンドをこう変更:
PYTHONPATH=$HOME/.local/lib/python3.8/site-packages \
/usr/local/bin/python3 /home/*****/www/*****.py \
>> /home/*****/www/screening.log 2>&1まとめ
いいですね、締めは大事ですからね。
少し読み物っぽく、でも技術ブログとしてちゃんと締まる感じで書いてみます。
まとめ
今回、さくらインターネットの共用サーバー上で Python を動かし、pandas を使ったスクリーニング処理を cron で自動実行しようとしました。
一見すると「pipが動かない」「pandasが入らない」「cronでimportできない」といった個別のエラーに見えますが、実際には次のような“環境特有の制約”が背景にありました。
--userインストールによる PATH 未設定問題/var/tmpがnoexecのため pip が失敗- cron 実行時に環境変数が引き継がれない
つまり、コードそのものよりも「実行環境との相性」が最大のハードルでした。
特に印象的だったのは、
エラーの原因がPythonではなく“サーバーの仕様やIP制限”だったことです。
今回の経験から得た大きな学びは、
アプリケーションの問題と、インフラの問題を切り分けて考えることの重要性
でした。
技術的なトラブルは遠回りに見えても、
一つずつ原因を分解していけば必ず整理できます。
同じように「動くはずなのに動かない」と悩んでいる方の参考になれば幸いです。

コメント