たまpy

Table of Contents

RamDisk

暫く前からMSYS2を使い始めたんだけど、こやつにtmpfsいわゆるRAMDISK機能 がない。SSDの寿命延長のため、それらしいのを探してみる。

Windows10で最適なRamDisk作成ソフト「ImDisk Toolkit」

ImDisk のインストール

を参考にいれた。ドライブ単位で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という事でやってみる。仮想環境を作る方法は、ほかにも有るようだけ ど、一番簡単な方法みたいだからね。

venvモジュールでの仮想環境時に最新バージョンのpipをインストール

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版が使われた、っての が真相でした。

Emacs Lisp デバッグ

Lispプログラムのデバッグ


This year's Index

Home