venv
長年使っている携帯の電池がヘタッテきたので、新しい物を求めて携帯屋へ行った。
流行のポケモンGoは、電池劣化加速アプリだな。 ビデオをオンしたまま、GPSも動いたまま。一番電池が消耗するモードで運用してる。 これは、電池屋とスマホ屋の陰謀に違いない。
その点、オイラーの携帯は、一度充電すれば、まあ大体一週間は持つ。それが、 最近、2日ほどで干上がるようになったんだ。
交換用電池有るかな?アコギなメーカーだと、携帯に合わせて特殊な形状の電池を 積み、もう保守用の電池はEOLになりました。新しいのに買い換えてくださいって 作戦だろうけど、ソニーさんはユーザー本意。なるべく電池の形状を統一して 保守部品の長期確保に動いているとか。
取り寄せになりますって事で、数日してから取りに行った。いざ取り付けようと したら、形状が全く違うぞ。なんだこれは!
携帯屋からは正しい型番の物が発注されたけど、送られてきたものが違ったよう だった。よく型番を見ると、長い英数字の一文字だけが違うものだった。 ピックアップするときに間違えたんだな。失敗学に習って、一文字違いの 間違えるべくして間違えるような、名前を付けるの止そうね。>ソニーさん
御店の人が恐縮して、お詫びに2000円の商品券を差し上げます。こりゃまた 大盤振る舞いだ事。プライバシー情報が漏洩しても、たった500円しか貰えない せちがらい世の中なのに。。。
で、商品権は、カードに入れてくれるそう。ワレットカードって知ってます? て聞いてきた。なんじゃいそれ?
平たく言うと、スイカらしい。今年の小玉スイカは日照りで、玉が大きく ならなかったと義母が嘆いていた。ああ、話が逸れた。
ようするにプリペイドカード。スイカなんて持った事も無いおいらは、東京で 友人と移動する時、いつも自販機の前でうろうろしててごめんなさいです。
そんなワレットカードって、ずばり財布って意味なのね。オイラーは、小銭 入れかと思ってたら、どちらかと言うと財布でも札入れってイメージらしい。
そう、ワレットには思い出が有るんだ。昔、海外出張をよくやってた頃、 機内の販売カタログに、スッチーご用達のワレットが便利ですって出てた。
ヨーロッパの国を縦断する時、国毎に通貨が異なるから、小銭はおろか 札も、いろいろな国のものが混じる。札の方は、図柄で何とか区別出来た けど、小銭はさっぱり区別が出来ない。
苦肉の策で、国境をまたぐたびに、prevな国の通貨一式ビニール袋に 収納とかやってた。それでも、なるべく小銭を消化したい。
自分で小銭を出すと絶対に間違える。専用の小銭入れ、開口部が広い 一目で中身を見れるのがよい。そんなんで、スッチー推薦のワレットを ずっと使ってたよ。いよいよ分からなくなると、小銭入れをパーと開いて 欲しいの持ってて態度。
そんな時、日本製の五円玉をわざと入れとおくと、向こうに人はしげしげと 手に取って、これは何だって聞いてくる。穴の空いたコインって向こうには ないから。
日本はね、 和同開珎 なんてコインで使用が始まったけど、これにも穴が空いていた。NHKがいやと言う程 宣伝してる時代劇にも穴の空いたコインのマークが出てくるぞ。六文銭ってね。 ちゃんと歴史を継承してるんです。とかいう話を、向こうの人にしてやったよ。
で、この際ですから作りましょ。作るのは無料ですから。無料と2000円には 勝てず。その場で申請、カードは自宅に届くので、カードを持って御店へGo。
無事にプリチャージ完了。試買いは、7-11。コンビになら何処でも使えるとか。 そりゃそうだよな。お財布携帯が廃って、スマホになったけど、お財布スマホは あのシャープも諦めましたから。
Android Oも見据えるシャープのAndroid Oneスマホ「507SH」開発秘話
で、スマホ屋は、ワレットカードでお茶を濁すというか、ユーザーの囲い込み に走ったわけだ。銀行屋とも手を組んで、カードにチャージとかを出来るように なってるみたい。チャージは、元牛乳屋コンビにで可能とか。7-11は自前の銀行 持ってるんで、敬遠したんだな。
長年の携帯使用で、ポイントが随分溜まっているとの事。(電池もポイント 消費で実質0円だった)
パソコンからログインして、ポイントをカードに移せるとか。やってみたら パスワードが分からない。しょうがないので、サポートセンターに電話。
その場で、オネーチャンが仮パスワードを発行してくれた。 小文字のナイス、大文字のミルクとか言いながら。おねーちゃん、フォネティクス コードもどきを知ってるね。さすが、通信屋所属。でも、そんな方言はいただけ ないよ。
小ノベンバー、大マイクとか、正しいフォネティクスコードを使おうね。 それにしても、長い長いパスワード。年寄りだと無理だろうね。どう説明する んだろう。聞きそびれた。
ログインすると、2段階認証を使いますとか。1回目のログインをすると、 携帯のCメールでURLが届いた。そこにアクセスして、パソコンとブラウザーを 認証しろとな。
え、Cメールって音声ラインじゃん。それで文字を送れるのか。一瞬考えたけど、 ああ、昔お世話になった音声帯域のモデムなんかと、勝手に納得。
それはいいんだけど、長いURLを制限時間内に入力するって競争が待ってた。 何度か失敗。でも、よく考えたら、そんな不便な事を強いるかな。
説明書へのリンクがひっそりと画面の隅に置いてあった。それを読んで納得。 Cメールの受信内容のURLをクリックせよとな。それで、URLに携帯から接続に 行くとな。そんな事思いもしなかったぞ。頭堅いな。
なんとか、認証を突破して、ポイントをカードにチャージ出来た。やれやれ。 散歩の時、財布も持たなくても済む。小銭じゃらじゃらにならない。簡単な 身分証明書代わりになる。(ポケモンGoしてるCarに撥ねられて、意識不明とか になっても、住所が割れる)まあ、持てば便利だな。
venv
ネットをうろうろしてると、Python3向けに、仮想環境を作れるよなんて記事に 遭遇した。この手のものは、rubyにも有ったような。最近と言うかここ5年以上は rubyと疎遠になってるからなあ。一時の喧騒が去って、静かな世界に戻ったんで しょうか?
それに対して、Pythonは今や昔に流行ったBasicですよ。どこにも溢れている。 ラズパイとかだとほぼ一択。Rを駆逐して統計界にも顔を出してきたし、 機械学習もPythonにお任せあれらしい。
そうなると、俺様Python環境欲しい。OSに備え付けの物だと、古くて使えなかったり するから、仮想Python環境欲しいねって要求有り。
公式な説明書は、 venv 窶・仮想環境に有った。 これに習って、早速オイラーも追試してみる。目標は、以前にやって失敗した Pythonでspiceもどきってやつが出来るかどうか。
実験環境は主にウブの16.04を使う事にしよう。こいつなら、3.5.2が入っている んで、不足は無いだろう。
sakae@ub:~$ sudo apt-get install python3-pip sakae@ub:~$ python3.5 -m venv -h usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] ENV_DIR [ENV_DIR ...] Creates virtual Python environments in one or more target directories. positional arguments: ENV_DIR A directory to create the environment in. optional arguments: -h, --help show this help message and exit --system-site-packages Give the virtual environment access to the system site-packages dir. --symlinks Try to use symlinks rather than copies, when symlinks are not the default for the platform. --copies Try to use copies rather than symlinks, even when symlinks are the default for the platform. --clear Delete the contents of the environment directory if it already exists, before environment creation. --upgrade Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place. --without-pip Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default) Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory.
色々なモジュールを自前で入れていく必要があるので、事前にpython3-pipを インストールしておく。
sakae@ub:~$ python3 -m venv hoge sakae@ub:~$ du -sh hoge 4.1M hoge sakae@ub:~$ tree hoge hoge ├── bin │ツツ ├── activate │ツツ ├── activate.csh │ツツ ├── activate.fish │ツツ ├── easy_install │ツツ ├── easy_install-3.5 │ツツ ├── pip │ツツ ├── pip3 │ツツ ├── pip3.5 │ツツ ├── python -> python3 │ツツ └── python3 -> /usr/bin/python3 ├── include ├── lib │ツツ └── python3.5 │ツツ └── site-packages │ツツ ├── easy_install.py │ツツ ├── pip │ツツ │ツツ ├── basecommand.py │ツツ │ツツ ├── baseparser.py : ├── pyvenv.cfg └── share └── python-wheels ├── CacheControl-0.11.5-py2.py3-none-any.whl : ├── pip-8.1.1-py2.py3-none-any.whl ├── pkg_resources-0.0.0-py2.py3-none-any.whl └── wheel-0.29.0-py2.py3-none-any.whl 43 directories, 275 files
どうも、pythonを動かすための最低環境が作成されるようだ。注目は、python3が pythonって名前で呼べるようにリンクを作っている事かな。いちいち3をつけるの 鬱陶しいですから。
続いて、この環境を使えるようにソースコマンドを発するようだ。予感では、 PATHの頭に、hoge/binを設定するんだろうな。前もって、printenvでログを 取っておいて、後で比べてみよう。
sakae@ub:~$ source hoge/bin/activate (hoge) sakae@ub:~$ printenv >NEW.log
目立つ変化は、shellのプロンプトが変わった事。それ以外は?
-PATH=/usr/local/sbin:... +VIRTUAL_ENV=/home/sakae/hoge +PATH=/home/sakae/hoge/bin:/usr/local/sbin:... +PS1=(hoge) ${debian_chroot:+($debian_chroot)}\u@\h:\w\$
なる程ね。思った通りだ。なお、activateはshellスクリプト。OpenBSDでkshとかを 使っていると、sourceなんて知らないと言われる。そういう時は、おろおろしないで ソースの代わりでドットを使ってやればよい。やってる事は、これだけなんだろうね。 細かい仕様は、仕様書を嫁。斜め読みしたら、
(hoge) sakae@ub:~$ cat hoge/pyvenv.cfg home = /usr/bin include-system-site-packages = false version = 3.5.2
このファイルが重要な役目を担っている事が判明した。
で、いよいよ、独自Pythonにpipコマンドで色を付けて行くんだけど、apt-getで 入れたpipが古いと、新しいのがあり末世と言われるので、先にアップデートして おくと良い。
(hoge) sakae@ub:~$ pip install --upgrade pip
リベンジ ahkab
a SPICE-like electronic circuit simulator written in Python
(hoge) sakae@ub:~$ pip install ahkab Collecting ahkab Collecting tabulate>=0.7.3 (from ahkab) Collecting scipy>=0.14.0 (from ahkab) Downloading scipy-0.18.0-cp35-cp35m-manylinux1_i686.whl (35.6MB) 100% |笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎笆遺毎| 35.6MB 11kB/s Collecting numpy>1.7.0 (from ahkab) Using cached numpy-1.11.1-cp35-cp35m-manylinux1_i686.whl Collecting sympy>=0.7.6 (from ahkab) Collecting mpmath>=0.19 (from sympy>=0.7.6->ahkab) Installing collected packages: tabulate, scipy, numpy, mpmath, sympy, ahkab
自前でコンパイルしてるんで、結構時間がかかる。pipがDLしたソースファイルは、 HOME-dirの中にあるキャッシュ-dir(勿論、眼に触れないように隠し金庫)の中の pip以下に格納されてる。
(hoge) sakae@ub:~/.cache/pip/http/6/b/6/9/d$ file 6b69d0e71a89d02d896fefcd41eb3f81eb24b035950e99a830952944 6b69d0e71a89d02d896fefcd41eb3f81eb24b035950e99a830952944: data
gitを周到したのか、わけわかめなデータだ。これじゃ中身が確認出来ないじゃない。 これだから、近頃の若い者は困る。バイナリー世代、のさばるんじゃねえぞ。
早速、お試しを実行してみると、
(hoge) sakae@ub:~$ python test.py W: Matplotlib not found. Traceback (most recent call last): File "test.py", line 30, in <module> outfilename='bpf_transfer_fn.png') File "/home/sakae/hoge/lib/python3.5/site-packages/ahkab/plotting.py", line 201, in plot_results fig = pylab.figure(figsize=options.plotting_display_figsize) NameError: name 'pylab' is not defined
これはpylabが入ってないという事か。じゃ、pipで入れろ。
Using cached matplotlib-1.5.1.tar.gz Complete output from command python setup.py egg_info: ============================================================================ Edit setup.cfg to change the build options BUILDING MATPLOTLIB matplotlib: yes [1.5.1] python: yes [3.5.2 (default, Jul 5 2016, 12:43:10) [GCC 5.4.0 20160609]] platform: yes [linux] REQUIRED DEPENDENCIES AND EXTENSIONS numpy: yes [version 1.11.1] dateutil: yes [dateutil was not found. It is required for date axis support. pip/easy_install may attempt to install it after matplotlib.] install it after matplotlib.] : libagg: yes [pkg-config information for 'libagg' could not be found. Using local copy.] freetype: no [The C/C++ header for freetype2 (ft2build.h) could not be found. You may need to install the development package.] png: no [pkg-config information for 'libpng' could not be found.] qhull: yes [pkg-config information for 'qhull' could not be found. Using local copy.]
で、見事にエラー。よく見ると、Linuxの嫌がらせが炸裂してますなあ。開発者用の パッケージを入れろってさ。どうせそんなのヘッダーファイル類なんだから、けちけち しないで最初から入れておいてくれれば良いのに。まったくもう、これだからLinuxは 好きになれないのよ。
で、方針転換と言うか、以前ジュピターだかをやった時に、pylabを入れた記憶があるぞ。 ちょいと確かめてみる。
(hoge) sakae@ub:~$ locate pylab /usr/lib/python3/dist-packages/pylab.py /usr/lib/python3/dist-packages/IPython/core/pylabtools.py : /usr/lib/python3/dist-packages/matplotlib/_pylab_helpers.py /usr/lib/python3/dist-packages/matplotlib/pylab.py
やっぱり入っていた。だったらこれを使えばいいんでないかい。どうやって?
(hoge) sakae@ub:~$ cat hoge/pyvenv.cfg home = /usr/bin include-system-site-packages = true version = 3.5.2
site-packagesがfalseだったのをtrueにしたら、本家の方も使ってくれるのでは なかろうか。
ビンゴでしたよ。無事に、bpf_transfer_fn.png が作成されました。パチパチ。
(hoge) sakae@ub:~$ du -sh hoge/ 218M hoge/ (hoge) sakae@ub:~$ cd hoge/lib/python3.5/site-packages/ (hoge) sakae@ub:~/hoge/lib/python3.5/site-packages$ ls ahkab pkg_resources-0.0.0.dist-info ahkab-0.18.dist-info __pycache__ easy_install.py scipy mpmath scipy-0.18.0.dist-info mpmath-0.19.dist-info setuptools numpy setuptools-20.7.0.dist-info numpy-1.11.1.dist-info sympy pip sympy-1.0.dist-info pip-8.1.2.dist-info tabulate-0.7.5.dist-info pkg_resources tabulate.py
仮想の移動
ちょいといたずら心を起こした。homeの下に作ったのを他の場所に移動したら 動くか? 仮想でふらふらしてるんだから、アンカーさえ打ち込めば、どこでも 動く予感。やってみろ。
hogeのdir毎、/tmpの下へ移動。ああ、このエリアははかない かげろう の エリアです。OSをrebootすると、自動的にゴミ掃除が行われます。だったら、 大量のごみを置いておけるかと言うと、おいらの環境では380Mぐらいに設定 されてました。有る程度は、使用をわきまえろって事ですな。
で、移動して、sourceすると、PATHは元有った場所を指してました。 そなら、
(hoge) sakae@ub:~$ grep hoge /tmp/hoge/bin/activate VIRTUAL_ENV="/home/sakae/hoge" if [ "x(hoge) " != x ] ; then PS1="(hoge) $PS1"
なる程、作った時の状況がハードコートされてるのね。ここを書き換えれば、 新しい所に移動しても動くって事だね。 やってみたら、ちゃんと動いた。素直な作りはPython流って事だな。 そんな事より、activateのソースを読んでおけ。
ああ、一つ不満が。仮想環境を作った時、python3をpythonでアクセス出来る ようにしてくれたのはいいけど、どうせならipythonもそうして欲しいぞ。 主流で使うのは、こちらですから。。。
それから、改めて環境変数を調べてみたんだ。 コマンドラインと環境 腐るほど沢山有って、げんなりしたよ。
FreeBSDではどうよ
どうも世の中はLinux中心で動いているみたいなんで、社会の裏側でひっそりと 頑張っている、FreeBSDにも光を当ててみる。
幸か不幸か、Python3系は全く入れてないんで、3系を入れる所からスタートする。
$ pkg search python3 : python3-3_3 The "meta-port" for version 3 of the Python interpreter python33-3.3.6_5 Interpreted object-oriented programming language python34-3.4.5 Interpreted object-oriented programming language python35-3.5.2 Interpreted object-oriented programming language
気合を入れて3系が整備されてるのは、3.3バージョンか。逆らって、一番新しいのを 入れる。別にウブと張り合う積もりはありませんです。調べてみると、pipも同梱されて るから、竹村健一じゃないけど、これだけで入れれば、新生活がスタート出来る んだな。(あ、健一さんなんてみんな知らないか。 竹村健一の手帖/ぼくなんかこれだけですよ。(1981年発表))
仮想環境を作り始める前に、ウブのキャッシュからpipの類をごっそりと盗んできて おく。ネットワークに負荷をかけない優しい心使いです。どこかのISPから、感謝状 こないかな。
$ python3.5 -m venv mypy $ source mypy/bin/activate (mypy) $ pip install --upgrade pip Collecting pip Using cached pip-8.1.2-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 8.1.1 Uninstalling pip-8.1.1: Successfully uninstalled pip-8.1.1 Successfully installed pip-8.1.2
これで、初期の環境が出来た。
(mypy) $ pip list pip (8.1.2) setuptools (20.10.1) (mypy) $ du -sh mypy/ 9.5M mypy/
状況は、こんな感じになった。後は、pipを使って入れていけばいいんだな。
---------------------------------------- Command "/usr/home/sakae/mypy/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-y38haq7m/scipy/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-yfu3gouk-record/install-record.txt --single-version-externally-managed --compile --install-headers /usr/home/sakae/mypy/include/site/python3.5/scipy" failed with error code 1 in /tmp/pip-build-y38haq7m/scipy/
やっぱりエラー、これ最後に出た報告。なんのこっちゃって案内だけど、screenを 遡っていくと、scipyを入れるには、blasとかのライブラリィーが必要って言ってる。 こういうのを地道に潰していかないと駄目。
(mypy) $ pip list mpmath (0.19) numpy (1.11.1) pip (8.1.2) setuptools (20.10.1) sympy (1.0) tabulate (0.7.5)
これ、今までの結果、やはりPythonを代表するようなモジュールは、色々な下支えが 必要って事です。そんなライブラリーは、pkgから入れればいいのでしょうかね。
(mypy) $ sudo pkg install openblas-0.2.18_1,1
入れてみたけど、外れた。BSDの場合は、変な所にインストールされてしまって、 それをpipが見つけ出せないって事もあるんで、要注意。こういう事になると、 単純なMakefileでmakeするってのが追いやすい。pipみたいに動きが隠されちゃうと 足止め喰らうんだよな。(単純に経験値が低いって噂が有るけどね)
今日の所は、これぐらいにしておこう。
(mypy) $ ipython /usr/home/sakae/mypy/lib/python3.5/site-packages/IPython/core/history.py:228: UserWarning: IPython History requires SQLite, your history will not be saved warn("IPython History requires SQLite, your history will not be saved") Python 3.5.2 (default, Jul 2 2016, 07:02:01) Type "copyright", "credits" or "license" for more information. IPython 5.0.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]:
負け惜しみで ipythonを入れてみた。履歴を取るのにSQLを使うって、なかなか 現代的って言うか、ここでもバイナリー野郎が出てきて、古き佳きテキスト文化が 失われております。
是非、テキスト文化を世界文化遺産に登録してください。
etc
pyenv および virtualenv の使い方(python 2.X