みなさん、こんにちは。
Raspberry Piでの開発や運用では、Pythonのバージョン管理からパッケージ管理、そしてcronがらみの「なぜか動かない」トラブルまで、地味だけど避けて通れない課題が数多くあります。当サイトでは、こうしたPython開発環境やシステム管理に関するノウハウを積み重ねてきました。
今回は「Python開発環境・システム管理トラブルシューティング」というテーマで、それらを一気にまとめてご紹介します。
pyenvの活用でPythonバージョン管理を簡単に
Raspberry Pi OSに複数のPythonバージョンが混在する問題に対し、pyenvで一元管理する方法を紹介しています。
依存パッケージのインストールからGitHubでのクローン、環境変数(PYENV_ROOT、PATH)の設定、pyenv install / global / local / shell でのバージョン切り替えまでの基本的な使い方を解説しています。
プロジェクトごとに異なるPythonバージョンを使い分けたい場合に便利なツールです。
Pythonの開発環境を「pyenv+venv」の組み合わせで構築
Pythonの開発環境をpyenv+pipenvから、pyenv+venvの組み合わせに移行した経緯を紹介した記事です。
Raspberry Piへの納品案件が増える中、「開発環境と納品環境のズレ」を防ぐため、開発環境をpyenv+venvの組み合わせに移行しました。
pyenvでPython本体のバージョンを固定し、venvでプロジェクトごとの依存パッケージを分離するという二段構えです。requirements.txtと組み合わせることで、誰がどこで作業しても同じ環境を再現できるようになります。
Debian/Ubuntuでのパッケージ管理はapt?aptitude?
Debian/Ubuntu系ディストリビューションのパッケージ管理コマンド、aptとaptitudeの違いを解説した記事です。
aptはシンプルで初心者向けですが依存関係の衝突には弱く、aptitudeはやや上級者向けながら複数の解決策を提示してくれる対話的な強みがあります。
IoT向けエッジサーバーの運用では、通常はaptを使い、メジャーアップグレードや依存関係エラー時にはaptitude safe-upgradeを試すという使い分けを提案しています。
Raspberry PiのセキュリティをVeracryptで強化
いまやセキュリティ上必須のデータ暗号化の記事です。
SDカードの紛失・盗難リスクに備えたデータ暗号化について、LUKSとVeracryptを比較。
LUKSはOS起動プロセスと統合された強力なディスク全体暗号化が可能な一方、操作がやや複雑です。対してVeracryptはクロスプラットフォームで、特定フォルダを「ファイルコンテナ」として手軽に暗号化できるのが特徴。Bullseye以降のOSであればdebパッケージでの導入が簡単です。
古いRaspbian Stretchでパッケージがインストールできない時の対処方法
公式サポートが終了した古いRaspbianをメンテナンスする記事です。
サポートが終了したRaspbian Stretchでは公式リポジトリが機能しなくなり、パッケージのインストール・更新ができなくなります。
対処法として、/etc/apt/sources.listの既存行をコメントアウトし、archive.raspberrypi.orgとlegacy.raspbian.orgの新しいリポジトリを追加。署名エラーが出る場合はAcquire::Check-Valid-Untilなどの設定で認証チェックを緩和する方法を紹介しています。
ただし、あくまで延命措置であり、最終的にはOSアップグレードが必要になる点は注意が必要です。
Ubuntuでログインパスワードを忘れたときの再設定方法
Ubuntu系ディストリビューションでログインパスワードを忘れてしまった際の再設定方法を2通り紹介しています。
1つ目はGRUBの「リカバリーモード」からrootシェルを起動し、ファイルシステムを書き込み可能にしてpasswdコマンドで変更する方法。2つ目は、より汎用的にGRUBの起動オプションを直接編集してinit=/bin/bashでシェルを起動する方法です。
いずれも物理的なアクセスが前提となる点に注意が必要です。
Boto3を特定ユーザーでインストールする全手順(オフライン環境)
オフラインでPythonライブラリをインストールする方法を解説した記事です。
インターネット接続のない環境のRaspberry Piに、AWS SDKであるboto3を特定ユーザー権限でインストールする手順を解説。
別のPCでpip downloadを使いboto3と依存パッケージ(botocore、jmespathなど)の.whlファイルを事前にダウンロードし、USBメモリなどで転送。依存関係の末端から順にpip install –no-depsでインストールしていくスクリプトを用意し、suコマンドで特定ユーザー権限でのインストールを実現しています。
cronだと動かない!「シェル実行と結果が違う」時の原因と解決策
cron実行とシェル実行の差に格闘した顛末です。
withings-syncをcronで自動実行していたところ、API接続は成功するのにデータが同期されない現象に遭遇。
原因は「$HOMEが設定されていない」「タイムゾーンがUTCでズレる」「.bashrcの冒頭にあるreturn文でpyenvの設定が読み飛ばされる」という3つの環境差にありました。
解決策として、TZ=Asia/Tokyoの指定とbash -l -cでログインシェルを再現するcron記述を紹介しています。
cronの限界をSSHで突破!「手動実行と同じ環境」を強制的に作り出す
cronでどうしてもうまく行かない場合の禁断の手法を紹介した記事です。
bash -l -cでログインシェルを再現してもwithings-syncの同期が数日後にまた失敗した経験から、より確実な方法として、別のLinuxサーバーからSSH経由でコマンドを実行する構成に切り替えた記事です。
ed25519形式の鍵ペアとssh-copy-idによるパスワードなしログインを設定し、cronから「SSHでログインしてスクリプトを叩く」という、ほぼ手動実行と同じプロセスを踏むことで環境差の問題を回避しています。
セキュリティ上あまりおすすめできない方法ですが、ご参考までに。
ICレコーダーのWAV音源をコマンド一発でノイズ除去&MP3変換
WAV音源を自動処理する方法を解説した記事です。
ICレコーダーの録音データをNotebookLMにアップロードする際の容量制限や、後から聞き返す際のホワイトノイズが気になるという課題に対し、SoXとFFmpegを組み合わせたシェルスクリプトを紹介。
あらかじめ無音区間からノイズプロファイルを学習させ、フォルダ内の全WAVファイルに対しsox noiseredでノイズ除去した後、ffmpegで40kbpsの軽量MP3に一括変換します。Raspberry Piでも動作しますが、処理が重いためPi 5での実行を推奨します。
こうして並べてみると、「動かして終わり」ではなく「動かし続ける」ための地道な工夫が、Python環境構築からcronのトラブルシューティングまで一貫したテーマになっていることがわかります。特にcron関連の2本は、原因が特定できないまま試行錯誤を重ねる過程をそのまま記事化しており、同じ壁にぶつかった方の助けになれば幸いです。
「Raspberry Piで試作はできた。でも、これを24時間365日動かし続けられるのか?」——多くのプロジェクトがつまずくのは、実はここからです。
ビューローみかみでは、構想段階の壁打ちからPoC・実装・現場導入まで、医療・介護の現場で「使い続けられる」ものづくりを支援しています。
シングルボードコンピューターを用いた試作から、医療現場で実際に動き続けている運用ノウハウまで。「動くもの」を「動き続けるもの」にするお手伝いをします。
▶ Raspberry Pi受託開発サービスの詳細はこちら
気になることがあればお気軽にご相談ください。
本日も最後までお読みいただき、ありがとうございました。
それでは、よいRaspberry Piライフを!



