PEP668エラー回避のヒント:pipxの活用

最近のUbuntuRaspberryPiを使用しているとpipコマンドでライブラリのインストールをするときにPEP668のエラーが出てきます。 以下は最新のRaspberryPi OSであるDebian GNU/Linux 12 (bookworm)pipコマンドを使用してnumpyを インストールしてみた結果になります。

$ pip install numpy
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

エラーメッセージはaptコマンドを使用したインストールとpipコマンドでインストールがバッティングするのでvenvを使用してねというメッセージになります。最近のPythonのライブラリ関係はライブラリとしての使用はもちろんなのですが、エントリーポイントのような形で単体で動くコマンドのような役割を持ったものも多く存在しています。そのため、pipコマンドでのインストールでは仮想環境であるvenvを使用したほうが環境の混濁にならないのでいいですよ~という警告になります。もちろん、このあたりの回避方法はオプションスイッチの指定であったり、設定ファイルなどを使用すれば回避可能です。

【参考】

blog.jp.square-enix.com

ですが、その他の方法として、pipxという方法もあるようです。先程のpipコマンドを実行時には表示されていませんでしたが、以前は以下の表示がありました。pipxを使用するのが簡単ですよってことのようです。

 If you wish to install a non-Debian packaged Python application,
 it may be easiest to use pipx install xyz, which will manage a
 virtual environment for you. Make sure you have pipx installed.

【参考】

peps.python.org

自分はpipxの存在については初耳でもあったので、ちょっと調べてみました。

続きを読む

UbuntuやRaspberry Piでも利用可能な音声合成エンジンEdge-TTSの導入方法

先日来使用しているVOICEVOXですが、PCであればかなり高速に処理をすることができるとはいえ、リアルタイム性?というところではやはり処理時間がかかるため会話というところには使用が難しいと思いました。そこで、他にもなにかないかなと思い探してみることにしました。結果的にOpenJTalk一択かもしれないのですが、それ意外の可能性も捨てたくないですよね。

今回はEdge-TTSを使用してみることにします。EdgeというとWindowsの標準ブラウザというイメージがあるので、Windows意外では使用できないのでは?と思われる方もいるかと思いますが、今回使用するEdge-TTSはWindowsでの使用はもちろん、EdgeブラウザのインストールされていないLinux環境RaspberryPiでも使用できる点は非常に便利かなと思います。あとは、電子工作なでと状況に合わせた使用できるかという観点についても調べてみたいと思います。

【参考】

github.com

pypi.org

今回試してみた環境

今回試してみたのはUbuntu Desktop 22.04 LTSRaspberryPi OS最新版となります。

【RaspberryPi OSの実行環境】

Edge-TTSの導入方法

edge-ttsのインストールはPythonの開発環境があれば非常に簡単です。

Pythonのライブラリを含めて使用する場合にはpipコマンドから以下のようにすればOKです。

$ pip install edge-tts

また、プログラミングを行わないで単にコマンド実行で行うこともできるので、この利用法であれば、以下のコマンドでインストールができます。

$ pipx install edge-tts
続きを読む

復習:各OSの環境変数の使い方を学びなおす

環境変数とシェル変数の混同があったので少し修正いたしました(2024.02.05)

久々にNode-REDを復習してみようと考えて、Node-RED日本ユーザ会のホームページを眺めていました。

nodered.jp

そういえば、これまでに開発時に環境変数って使ったことあまりなかったなあと思い、どうやって使うんだっけ?という疑問がでてきたので、ちょっと調べてみたら、数種類の方法があったので学びなおすことにしました。

該当のページは以下となります。

nodered.jp

環境変数の重要性

ご存じの方はこんな内容は読まないかなと思いますが…

環境変数(かんきょうへんすう、英語: environment variable)はオペレーティングシステム (OS) が提供するデータ共有機能の一つ。OS上で動作するタスク(プロセス)がデータを共有するための仕組みである。特にタスクに対して外部からデータを与え、タスクの挙動・設定を変更するために用いる。(Wikipediaより)

ja.wikipedia.org

OSが提供するデータ共有機能で、コンピュータの黎明期からかなり使われている機能です。一般的な例としてはPATHなどを通すというのもPATHという環境変数にプログラムを実行するパスを事前登録するということで行っています。また最近はREST APIなどの認証データの保存などにも使用されています。

環境変数にしたほうが良い情報

環境変数を利用する主な利点は、セキュリティの向上と設定の柔軟性です。重要なデータをソースコードから分離することで、誤ってリポジトリにコミットしたり、不必要に広範囲に晒したりするリスクを減らすことができます。また、環境変数を通じてアプリケーションの設定を外部から調整できるため、異なる環境や条件下での運用が容易になります。

すべてではありませんが、以下のような情報は環境変数にしたほうがよさそうです。

  1. 機密情報:パスワード、APIキー、秘密鍵などの機密性の高い情報。これらをソースコードに直接記述すると、セキュリティリスクが高まります。
  2. 設定情報:データベースの接続設定、外部サービスのエンドポイント、アプリケーションのポート番号など、環境に依存する設定情報。
  3. 環境依存の変数: 開発、テスト、本番など異なる環境で異なる値を使用する変数:バッグモードの有効化、ログの詳細レベル、リソースの割り当て量など。
  4. アプリケーションの動作をカスタマイズするためのフラグ:特定の機能のオン/オフや、機能の挙動を変更するためのフラグ。
  5. 外部リソースへのパス:ファイルシステムのパスやURLなど、外部リソースへの参照。

自分は結構コードにそのまま記載していることがほとんどでした。ちょっと反省です。

ということで、環境変数の設定に関して各処理系でまとめ、次回にNode-REDでの使用方法をまとめます。

20240205追記

macOS、Linux (bash環境)に関してですが、下記表現の中で、一時的な環境変数と、シェル変数という言葉の混同がある部分があるようなので一部文面の修正を行っています。

シェル変数とは

現在実行しているシェルの中だけで有効な変数。

環境変数とは

新たなシェルを起動したり、コマンドを実行した場合にも継承される変数となります。 ただ、現在実行しているシェル内で環境変数の設定をした場合には(exportコマンドを使用した場合)環境変数になりますが、 そのシェル内でのみ使用できる環境変数となります。

また、シェル変数は環境変数へと昇格(よい表現かわからないですが)することもできます。exportコマンド以降にシェル変数の定義ができるためです。

なかなか、分かりにくい表現になっていますが、一時的な環境変数というのは使用できるけれども、運用上はあんまり使用しないかなと考えています。

続きを読む

気になる音声合成ソフト「VOICEVOX」をUbuntuで試してみた!

前から気になっていたVOICEVOXUbuntuに入れてみました。WindowsMacでは動くのは当然だよね~ってところで、Linuxにも正式に対応しているというのが割とすごいなという印象です。以前から気にはなっていたのですが、なかなかさわる機会がなかったので、今回少し時間ができたのでインストールしてみようと思います。

VOICEVOXの説明に関しては以下の通り

ja.wikipedia.org

VOICEVOXは、ヒホが開発した音声合成ソフトウェアである。 VOICEVOX で生成した音声合成を使用して自分の作品を公開する場合、クレジットを表記し利用規約に同意すれば、商用、非商用問わず無料で利用できる。(Wikipediaより)

商用利用もできるため、ゆっくりボイスとともにYoutubeで使用頻度高めの音声合成アプリになっているようです。

続きを読む

NVIDIA CUDAとDocker: ノートPCでのAI開発の第一歩

2023.12.21 追記 コンテナが起動しない場合

最近、生成系AIに関しても興味がでてきたのでちょこっとStable Diffusionなんかも簡単に動かしたいなあと思うようになりました。と入っても、ノートPCではストレージにも余裕がそこまでなく、やばいときには環境を削除したり戻したりということも考えなければ行けないのですがローカルに環境をインストールをするのがちょっと抵抗感がありました。そこで今回はその下準備としてまず、Dockerをインストールしている自分の環境でNVIDIACUDAコアが使用できるのか確認する方法が必要でした。ということでその調べかたをメモしておきます。

続きを読む
/* -----codeの行番号----- */