たまpy
Table of Contents
RamDisk
暫く前からMSYS2を使い始めたんだけど、こやつにtmpfsいわゆるRAMDISK機能 がない。SSDの寿命延長のため、それらしいのを探してみる。
Windows10で最適なRamDisk作成ソフト「ImDisk Toolkit」
を参考にいれた。ドライブ単位でRAMDISKになるのね。作成したら、自動的に マウントされた。
$ df Filesystem 1K-blocks Used Available Use% Mounted on C:/msys64 248751100 147369936 101381164 60% / R: 1048572 17292 1031280 2% /r $ cd /r $ dd if=/dev/zero of=out bs=1M count=200 200+0 records in 200+0 records out 209715200 bytes (210 MB, 200 MiB) copied, 0.0844282 s, 2.5 GB/s
SSDより遅いけど、目的が違うので我慢。使い勝手がLinuxと同一なのを目指し てるからね。これでいいんです。
gnuplot
ふとWindowsにいれているgnuplotのフォルダーを覗いてみたんだ。そしたら、 wgnuplot.exeなんてのがあった。
起動してみると、専用の窓がでてきた。今迄気がつかなかったぞ。それも無理 ないか。血圧グラフの下請けとしてgolangから使っていたからね。
で、この窓をみてると、GUIのお手本のように思えてきた。後学のためにソー スを閲覧しておくか。 INSTALLなんて文書があったので、手始めにみる。
MS-Windows ---------- We provide binary packages with an installer or as "portable" versions packed in zip / 7z format on SourceForge. We currently support and test building with the following compilers and Makefiles: Mingw-w64/MSYS2: config/mingw/Makefile Microsoft Visual C++: config/msvc/Makefile OpenWatcom: config/watcom/Makefile Cygwin: config/cygwin/Makefile
MINGWな人は 見るようにって勧めてたので、 gnuplot Support Requests を参照。
ソース拝観って事で、唯一知ってるWinMainを調べてみると、
#ifndef WGP_CONSOLE #ifndef __WATCOMC__ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int n\ CmdShow) #else int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmd\ Show) #endif #else :
こんな具合に、ifdefでガッツリとガードされてました。注目のアプリは皆が 蟻のようにむらがるんですね。いや、よってたかって便利にしてくれてるって 事ですよ。まあ、兎も角Windowsアプリって事では、いろいろ参考になる。
python -m venv mypy
前回、上記のようにして仮想環境を作る方法を知ったものだから、たまに pythonという事でやってみる。仮想環境を作る方法は、ほかにも有るようだけ ど、一番簡単な方法みたいだからね。
at ArchLinux
試しに/tmpに移動してから作成。
(mypy) [sakae@arch ~]$ pip install matplotlib (mypy) [sakae@arch ~]$ pip install ipython (mypy) [sakae@arch ~]$ pip install pandas (mypy) [sakae@arch ~]$ pip freeze > requirements.txt pip install -r requirements.txt
これで簡単にインストールできた。環境を移動するには、モジュールのバージョ ンをテキストにおとしておいて、それをロードするみたいだ。
環境にはいるには、activateする必要がある。昔はそれを .bashrcあたりに記 述した覚えがあるんだけど、今はそうなっていない。で、環境をチェック。
(mypy) [sakae@arch ~]$ env | grep mypy PWD=/tmp/mypy/bin VIRTUAL_ENV=/tmp/mypy VIRTUAL_ENV_PROMPT=(mypy) PS1=(mypy) [\u@\h \W]\$ PATH=/tmp/mypy/bin:/usr/local/sbin:....
それっぽいので出てきた。じゃ、スクリプトはどうなってる?
(mypy) [sakae@arch ~]$ cat /tmp/mypy/bin/activate # This file must be used with "source bin/activate" *from bash* # you cannot run it directly deactivate () { # reset old environment variables if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then PATH="${_OLD_VIRTUAL_PATH:-}" export PATH unset _OLD_VIRTUAL_PATH fi :
簡単な仕掛けなんだな。
test from emacs
早速、仮想環境をemacsから使ってみる。どこにpythonが存在するかは、シェ バングが教えてくれるとな。
#! /usr/bin/env python import numpy as np sample1 = np.array([0,1,2,3]) print(sample1)
こんなテストスクリプトを作成。次に C-c C-p して、起動する。それから編集画面で、 C-c C-c して、実行。後は、 書き換えたら、C-c C-c。楽ちんである。
Python 3.10.9 (main, Dec 19 2022, 17:35:49) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> [0 1 2] >>> [0 1 2 3] >>>
at MSYS2/mingw64
事情が飲み込めたんで、Windowsでも確認。こちらが本命です。
$ pip install numpy Collecting numpy Using cached numpy-1.24.2.tar.gz (10.9 MB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [40 lines of output] Traceback (most recent call last): File "R:\mypy\lib\python3.10\site-packages\pip\_vendor\pep517\in_process \_in_process.py", line 351, in <module> main() : File "C:/Users/sakae/AppData/Local/Temp/pip-build-env-bxw7w3v1/overlay/l ib/python3.10/site-packages/setuptools/_distutils/msvc9compiler.py", line 295, i n <module> raise DistutilsPlatformError("VC %0.1f is not supported by this module " % VERSION) distutils.errors.DistutilsPlatformError: VC 6.0 is not supported by this m odule [end of output] note: This error originates from a subprocess, and is likely not a problem wit h pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip.
pipに責任はないよ。サブプロセスが返したのを、そのまま表示してるだけだ からねと、いわれてもなあ。。。
at FreeBSD
そんじゃ、こちらのOSでも確認。python 3.9.16と若干古い環境。
(mypy) [sakae@fb /tmp]$ pip install numpy Collecting numpy Downloading numpy-1.24.2.tar.gz (10.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.9/10.9 MB 4.8 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: numpy Building wheel for numpy (pyproject.toml) ... done Created wheel for numpy: filename=numpy-1.24.2-cp39-cp39-freebsd_13_1_release_p3_i386.whl size=7882573 sha256=d34cafde1942389c49d07c665fe3fb662fccfeb13ec743bea302a8be8e00d6a1 Stored in directory: /usr/home/sakae/.cache/pip/wheels/a8/b1/8a/5bfe753f31eab127bc070373883a65dbe970e8db85118d2a1b Successfully built numpy Installing collected packages: numpy Successfully installed numpy-1.24.2 WARNING: You are using pip version 22.0.4; however, version 23.0 is available. You should consider upgrading via the '/tmp/mypy/bin/python3.9 -m pip install --upgrade pip' command.
外れの環境だとtar玉から作成するのか。膨大な時間がかかる。メジャーなOS を使うのがいいんだな。まあ、一度 作った物はキャッシュされるようだけど。 それにしても、最後のワーニングがうざいな。
at Debian
こちらでも、やってみる。
(mypy) sakae@deb:/tmp$ pip install numpy ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
初回からつまづき。世界の皆に聞いてみる。
(mypy) sakae@deb:/tmp$ vi mypy/pyvenv.cfg home = /usr/bin include-system-site-packages = true version = 3.9.2
falseをtrueに変更するとな。そんなの中々でてこなかったぞ。闇鍋だな。
(mypy) sakae@deb:/tmp$ pip install numpy Collecting install Using cached install-1.3.5-py3-none-any.whl (3.2 kB) Collecting numpy Using cached numpy-1.24.2.tar.gz (10.9 MB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Building wheels for collected packages: numpy Building wheel for numpy (PEP 517) ... -
この挙動はFreeBSDと同じ。マイナーな環境だと玉から作るんだな。
Processing numpy/random/_bounded_integers.pyx.in Cythonizing sources INFO: blas_opt_info: INFO: blas_armpl_info: INFO: customize UnixCCompiler INFO: libraries armpl_lp64_mp not found in ['/tmp/mypy/lib', '/usr/local/li\ b ', '/usr/lib', '/usr/lib/i386-linux-gnu'] INFO: NOT AVAILABLE :
そして、とんでもない所でエラー。エラーだからって、赤色表示してくれたけ ど、補色でみずらいぞ。もう、32bitな環境じゃ使うなって事です。
at 純正版のpython
心をいれかえて、メジャーなWindows10に戻ります。 純正版ならどうか? Pythonのダウンロードとインストール を試してみる。判りやすい場所って事で、/c/app/pythonに配置した。
$ echo $PATH /c/app/python:/mingw64/bin:.... $ python Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit ( AMD64)] on win32
gdbに付属してきたgcc製のやつは、もういらないな。
$ python Python 3.10.9 (main, Jan 14 2023, 21:23:14) [GCC 12.2.0 64 bit (AMD64)] on win32
先程 作ったRAMDISK上で。だって、砂上の楼閣かもしれないからね。
sakae@atom MINGW64 /r $ ls mypy/ Include/ Lib/ Scripts/ pyvenv.cfg sakae@atom MINGW64 /r $ ls mypy/Scripts/ Activate.ps1 activate.bat pip.exe* pip3.exe* pythonw.exe* activate deactivate.bat pip3.10.exe* python.exe* sakae@atom MINGW64 /r $ . mypy/Scripts/activate (mypy) sakae@atom MINGW64 /r $ pip install numpy Collecting numpy Downloading numpy-1.24.2-cp310-cp310-win_amd64.whl (14.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 6.4 MB/s eta 0:00:00 Installing collected packages: numpy Successfully installed numpy-1.24.2 [notice] A new release of pip available: 22.3.1 -> 23.0 [notice] To update, run: python.exe -m pip install --upgrade pip
あっさり動いてしまったので、拍子抜け。
主訴 ModuleNotFoundError
ちゃんとMSYS2な環境でも動くか確認。仮想環境は、RamDriveのRに構築。だっ て、たま(に)py ですから。常時pyの日経ソフトウェアと 違いますから。いっその事、日経Pythonに雑誌名を変更したら、いかが。
Python 3.10.9 (main, Jan 14 2023, 21:23:14) [GCC 12.2.0 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Traceback (most recent call last): File "<string>", line 17, in __PYTHON_EL_eval File "r:/z.py", line 3, in <module> import numpy as np ModuleNotFoundError: No module named 'numpy'
が、モジュールが探しあてられないって言われた。あれ、良く見ると、動いて いるpythonが違うぞ。 そんな事、昔に経験した事があった。ipython3を指定できなくてググッたんだっ けな。
(setq python-shell-interpreter "r:/mypy/Scripts/python.exe") ; (setq python-shell-exec-path `("r:/mypy/Scripts/")) ; (setq python-shell-extra-pythonpaths `("R:/mypy/Lib/site-packages/")) ; (setq python-shell-virtualenv-root "r:/mypy/")
こんな風に決め打ちした。コメントしてる奴は、python.elからの抜粋だけど、 必要なかった。ってか、ちゃんと機能するんだか未確認。
Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> [0 1 2] >>> [0 1 2 3 4]
動いたな。シェバングは不要だ。だって、emacsがちゃんと起動すべきpython を知っているから。仮想環境自体も知っているので、PATHを通さなくても動く。 これって、出来過ぎって思うぞ。後でスクリプトとして動かそうとした時、エ ラーになるからね。
py周り
後学のために、ちょっと復習。
>>> import pprint as pp >>> import sys >>> import os >>> pp.pprint(sys.path) ['', 'C:\\app\\python\\python310.zip', 'C:\\app\\python\\DLLs', 'C:\\app\\python\\lib', 'C:\\app\\python', 'R:\\mypy', 'R:\\mypy\\lib\\site-packages'] >>> print(os.getenv('PATH')) R;R:\mypy\Scripts;C:\app\python;C:\msys64\mingw64\bin;... >>> os.environ['NEW_KEY'] = 'test'
仮想環境のしくみ これも大事だなあ。
Python Package Indexを使ってPythonパッケージを検索
pip search hogefuga での検索が出来なくなったんで、上記のURLを使えとな。
手始めに scikit-learn 1.2.1 こんなのが、いいかも知れない。
run-python
emacsで、ちょっとdebugっぽい事をやってみる。リハビリだな。
キーシーケンスを関数名に変換。そうしておいてBPを設定。
M-x python-mode C-h k C-c C-p run-python M-x debug-on-entry run-python M-x run-python
出てきたな。
Debugger entered--entering a function: * run-python("r:/mypy/Scripts/python.exe -i" nil t) funcall-interactively(run-python "r:/mypy/Scripts/python.exe -i" nil t) command-execute(run-python record) execute-extended-command(nil "run-python" "run-python") funcall-interactively(execute-extended-command nil "run-python" "run-python") command-execute(execute-extended-command)
デフォルトのインタープリタ名は、python3になってた。でも仮想環境には、 python.exeしか無いので、しかたなしにMYSYS側のgcc版が使われた、っての が真相でした。