<< 2026年02月
新着記事
最近のコメント
月別
カテゴリ
2026.02.09 12:48

久々Python


・昨日雪がそれなりだったけど、珍しくフカフカな雪でどんどん溶けていく。こういうのをパウダースノーっていうのかな?
・久しぶりにPythonを使うか・・・と思ってちょっとリハビリモードで以前書いたものを動かそうとしたら、numpyが無いよと言われた。
・そうかそうか・・・とpip install numpyしたらなんか叱られた。
・よくわからなくて検索したら、仮想環境で動かすんだということ。言語処理系レベルで仮想環境とは一体なに?ということろで例によってお尋ねしてわかった。
・今までの一般的な言語処理系だと、インストールしたライブラリ類の種類やバージョン、パス設定などの組み合わせによって同じプログラムがちゃんと動かなかったり挙動が変わったりということが起きてしまう。
・そこで、デフォルト状態から変更・追加などをされたものをユーザが指定したディレクトリの下に格納しておいて、切り替えて使えば良いじゃないかという発想か。
・たとえば
 A)数値演算したい
 B)組み込みのAIを試してみたい
 C)USB接続したい
 D)デバイスから取り込んだグラフを描画したい
 などというものがあったとき、今まではこれらに必要なライブラリ類を全部インストールした一つの開発環境になってしまっていた。
 一体今回のものでは何が必要なのかわかりにくいし、 他の人が同じ環境を別に作ろうとしても難しい。
・ということで、
 A)のための環境(使っているライブラリ類などの動作環境)
 B)のための環境
 ・・・
 という感じでそれぞれのフォルダにまとめて使いたい環境に切り替えて使う。pip installとかすると今使っている環境用のフォルダにインストールされるという具合。
 適当なディレクトリで
 python3 -m venv .venv_A
とかすると、.env_Aというディレクトリが作られて、この下に最低限必要なものが書き込まれる。pythonの環境もインストール直後のような状態になる
 (ちなみに、デフォルトのシェルの状態はクリーンではなく、Linux側で必要なものがあれこれ入っているけど、activateすると、これらも全部外された、本当にクリーンな状態になる)
 ここで
 source .venv_A/bin/activate
とかすれば、パス設定なども含めて.venv_Aな環境に切り替わる。で、
pip install numpy
とかすると、グローバルな言語処理系。環境ではなく、.venv_Aディレクトリの下にインストールされる。
 これであれこれやった後に
 deactivate
とすれば、activateでセットされたパスだのなんだのは綺麗さっぱり忘れて元に戻る。もちろん、これとは別に
 python3 -m venv .venv_B
source .venv_B/bin/activate
すれば、.venv_B用のクリーンな環境になる。
・で、Aの環境を引き継ぎたいとか言うことももちろんあるし、配布するときに「これが必要だよ」というのも教える必要がある。
 このときは、.venv_Aをactivateして使っている状態で、
 pip freeze >setup_env.txt
 とかやって、deactivateして.venv_Bをactivateして環境を切り替え。そして
 pip install -r setup_env.txt
 なんてやれば必要なものがインストールされて環境が再現される。

・なるほどね。というところで、更にGeminiしたら「VSCodeにMicrosoftのPythonなエクステンションとJupyter Notebook Renderersを入れると良いよってことで、入れてみる。
 面白いのはソースコードの中に
 #%%
 というのを入れると、ここがプログラムの切れ目(セクション)ということになってくる。たとえば、
#%%
import numpy as np
import matplotlib.pyplot as plt

# データを生成 (0から10までを100分割)
x = np.linspace(0, 10, 100)
y = np.sin(x)
print(x,y)
# グラフの設定
#%%
plt.plot(x, y, label='Sine Wave')
plt.title(loc="center", label="Hello Virtual Environment!")
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.legend()

# グラフを画像として保存
#%%
plt.savefig("my_plot.png")
print("グラフを 'my_plot.png' として保存しました!")
# %%

てな具合にしてやると、#%%の上に「セルの実行」とか「以下を実行」とか出てくるので、ここをクリックすると次の#%%まで実行してくれる。
・これで実行結果(たとえばグラフ表示)がイマイチだなと思ったら、今実行したセルのコードを変更してもう一回描画のところのセルだけ実行するなんてことができる。最初から全部やりなおし・・・ではないので便利ということ。

・ということでやっと時代に少し追いつけた感じ。