python: pip 8.0.0 のバグ修正

pip が動作しない、壊れた? >> コードを一行修正して解決

(1)環境

MacOSX 10.10 Yosemite 

python 2.7.11

pip 8.0.0

 $ which pip

/Users/my_name/anaconda/bin/pip

 

(2)不具合

$ pip install -U pip
Traceback (most recent call last):
File "/Users/my_name/anaconda/bin/pip", line 4, in <module>
from pip import main
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/__init__.py", line 15, in <module>
from pip.vcs import git, mercurial, subversion, bazaar # noqa
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/vcs/subversion.py", line 9, in <module>
from pip.index import Link
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/index.py", line 29, in <module>
from pip.wheel import Wheel, wheel_ext
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/wheel.py", line 32, in <module>
from pip import pep425tags
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/pep425tags.py", line 214, in <module>
supported_tags = get_supported()
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/pep425tags.py", line 162, in get_supported
arch = get_platform()
File "/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/pep425tags.py", line 119, in get_platform
major, minor, micro = release.split('.')
ValueError: need more than 2 values to unpack

 

(3)Stackoverflowを真似て解決。

まさに同じタイミング(数時間差)で同じような問題に遭遇している人を発見。

python - Upgrading to latest pip caused ValueError - Stack Overflow

これを真似て、

/Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/pep425tags.py

の119行目を変更。

 

変更前のファイル状況

$ cd /Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg/pip/
$ ls -l
total 736
-rw-r--r-- 1 root wheel 10431 20 Jan 17:11 __init__.py
-rw-r--r-- 1 root wheel 9332 20 Jan 17:11 __init__.pyc
-rw-r--r-- 1 root wheel 584 20 Jan 17:11 __main__.py
-rw-r--r-- 1 root wheel 505 20 Jan 17:11 __main__.pyc
drwxr-xr-x 24 root wheel 816 20 Jan 17:11 _vendor
-rw-r--r-- 1 root wheel 11429 20 Jan 17:11 basecommand.py
-rw-r--r-- 1 root wheel 8973 20 Jan 17:11 basecommand.pyc
-rw-r--r-- 1 root wheel 10465 20 Jan 17:11 baseparser.py
-rw-r--r-- 1 root wheel 11286 20 Jan 17:11 baseparser.pyc
-rw-r--r-- 1 root wheel 15921 20 Jan 17:11 cmdoptions.py
-rw-r--r-- 1 root wheel 15621 20 Jan 17:11 cmdoptions.pyc
drwxr-xr-x 26 root wheel 884 20 Jan 17:11 commands
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 compat
-rw-r--r-- 1 root wheel 31715 20 Jan 17:11 download.py
-rw-r--r-- 1 root wheel 25825 20 Jan 17:11 download.pyc
-rw-r--r-- 1 root wheel 7741 20 Jan 17:11 exceptions.py
-rw-r--r-- 1 root wheel 12902 20 Jan 17:11 exceptions.pyc
-rw-r--r-- 1 root wheel 36776 20 Jan 17:11 index.py
-rw-r--r-- 1 root wheel 34211 20 Jan 17:11 index.pyc
-rw-r--r-- 1 root wheel 6137 20 Jan 17:11 locations.py
-rw-r--r-- 1 root wheel 5013 20 Jan 17:11 locations.pyc
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 models
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 operations
-rw-r--r-- 1 root wheel 7210 20 Jan 17:11 pep425tags.py
-rw-r--r-- 1 root wheel 7393 20 Jan 17:11 pep425tags.pyc
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 req
-rw-r--r-- 1 root wheel 156 20 Jan 17:11 status_codes.py
-rw-r--r-- 1 root wheel 414 20 Jan 17:11 status_codes.pyc
drwxr-xr-x 22 root wheel 748 20 Jan 17:11 utils
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 vcs
-rw-r--r-- 1 root wheel 32030 20 Jan 17:11 wheel.py
-rw-r--r-- 1 root wheel 26062 20 Jan 17:11 wheel.pyc

 

オリジナルをコピーして別名保存。

$ sudo cp pep425tags.py pep425tags_original_my_name.py
$ ls -l
total 752
-rw-r--r-- 1 root wheel 10431 20 Jan 17:11 __init__.py
-rw-r--r-- 1 root wheel 9332 20 Jan 17:11 __init__.pyc
-rw-r--r-- 1 root wheel 584 20 Jan 17:11 __main__.py
-rw-r--r-- 1 root wheel 505 20 Jan 17:11 __main__.pyc
drwxr-xr-x 24 root wheel 816 20 Jan 17:11 _vendor
-rw-r--r-- 1 root wheel 11429 20 Jan 17:11 basecommand.py
-rw-r--r-- 1 root wheel 8973 20 Jan 17:11 basecommand.pyc
-rw-r--r-- 1 root wheel 10465 20 Jan 17:11 baseparser.py
-rw-r--r-- 1 root wheel 11286 20 Jan 17:11 baseparser.pyc
-rw-r--r-- 1 root wheel 15921 20 Jan 17:11 cmdoptions.py
-rw-r--r-- 1 root wheel 15621 20 Jan 17:11 cmdoptions.pyc
drwxr-xr-x 26 root wheel 884 20 Jan 17:11 commands
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 compat
-rw-r--r-- 1 root wheel 31715 20 Jan 17:11 download.py
-rw-r--r-- 1 root wheel 25825 20 Jan 17:11 download.pyc
-rw-r--r-- 1 root wheel 7741 20 Jan 17:11 exceptions.py
-rw-r--r-- 1 root wheel 12902 20 Jan 17:11 exceptions.pyc
-rw-r--r-- 1 root wheel 36776 20 Jan 17:11 index.py
-rw-r--r-- 1 root wheel 34211 20 Jan 17:11 index.pyc
-rw-r--r-- 1 root wheel 6137 20 Jan 17:11 locations.py
-rw-r--r-- 1 root wheel 5013 20 Jan 17:11 locations.pyc
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 models
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 operations
-rw-r--r-- 1 root wheel 7210 20 Jan 17:11 pep425tags.py
-rw-r--r-- 1 root wheel 7393 20 Jan 17:11 pep425tags.pyc
-rw-r--r-- 1 root wheel 7210 21 Jan 09:22 pep425tags_original_my_name.py
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 req
-rw-r--r-- 1 root wheel 156 20 Jan 17:11 status_codes.py
-rw-r--r-- 1 root wheel 414 20 Jan 17:11 status_codes.pyc
drwxr-xr-x 22 root wheel 748 20 Jan 17:11 utils
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 vcs
-rw-r--r-- 1 root wheel 32030 20 Jan 17:11 wheel.py
-rw-r--r-- 1 root wheel 26062 20 Jan 17:11 wheel.pyc

 

デスクトップに移動させて編集し、それを元の場所に持ってきてoverride。

$ sudo mv /Users/my_name/Desktop/pep425tags.py .
$ ls -l
total 752
-rw-r--r-- 1 root wheel 10431 20 Jan 17:11 __init__.py
-rw-r--r-- 1 root wheel 9332 20 Jan 17:11 __init__.pyc
-rw-r--r-- 1 root wheel 584 20 Jan 17:11 __main__.py
-rw-r--r-- 1 root wheel 505 20 Jan 17:11 __main__.pyc
drwxr-xr-x 24 root wheel 816 20 Jan 17:11 _vendor
-rw-r--r-- 1 root wheel 11429 20 Jan 17:11 basecommand.py
-rw-r--r-- 1 root wheel 8973 20 Jan 17:11 basecommand.pyc
-rw-r--r-- 1 root wheel 10465 20 Jan 17:11 baseparser.py
-rw-r--r-- 1 root wheel 11286 20 Jan 17:11 baseparser.pyc
-rw-r--r-- 1 root wheel 15921 20 Jan 17:11 cmdoptions.py
-rw-r--r-- 1 root wheel 15621 20 Jan 17:11 cmdoptions.pyc
drwxr-xr-x 26 root wheel 884 20 Jan 17:11 commands
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 compat
-rw-r--r-- 1 root wheel 31715 20 Jan 17:11 download.py
-rw-r--r-- 1 root wheel 25825 20 Jan 17:11 download.pyc
-rw-r--r-- 1 root wheel 7741 20 Jan 17:11 exceptions.py
-rw-r--r-- 1 root wheel 12902 20 Jan 17:11 exceptions.pyc
-rw-r--r-- 1 root wheel 36776 20 Jan 17:11 index.py
-rw-r--r-- 1 root wheel 34211 20 Jan 17:11 index.pyc
-rw-r--r-- 1 root wheel 6137 20 Jan 17:11 locations.py
-rw-r--r-- 1 root wheel 5013 20 Jan 17:11 locations.pyc
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 models
drwxr-xr-x 6 root wheel 204 20 Jan 17:11 operations
-rw-r--r--@ 1 my_name staff 7203 21 Jan 09:24 pep425tags.py
-rw-r--r-- 1 root wheel 7393 20 Jan 17:11 pep425tags.pyc
-rw-r--r-- 1 root wheel 7210 21 Jan 09:22 pep425tags_original_my_name.py
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 req
-rw-r--r-- 1 root wheel 156 20 Jan 17:11 status_codes.py
-rw-r--r-- 1 root wheel 414 20 Jan 17:11 status_codes.pyc
drwxr-xr-x 22 root wheel 748 20 Jan 17:11 utils
drwxr-xr-x 12 root wheel 408 20 Jan 17:11 vcs
-rw-r--r-- 1 root wheel 32030 20 Jan 17:11 wheel.py
-rw-r--r-- 1 root wheel 26062 20 Jan 17:11 wheel.pyc
$ pip install -U pip
Requirement already up-to-date: pip in /Library/Python/2.7/site-packages/pip-8.0.0-py2.7.egg

pipは無事に全て完了。

python isochronesのための設定:Open MPI, CMake, mpi4py, MultiNest, PyMultiNest

(1)Open MPI
http://www.open-mpi.org/software/ompi/v1.8/
から openmpi-1.8.8.tar.gz をダウンロード。解凍。

$ cd openmpi-1.8.8
$ ./configure
$ make all
$ sudo make install

(2)CMake
$ sudo port install cmake +gui

(3)mpi4py [これは pymultinest に必要]
$ sudo pip install mpi4py

(4)MultiNest [これは pymultinest に必要]
$ cd
$ git clone https://github.com/JohannesBuchner/MultiNest.git
$ cd MultiNest/build/
$ cmake ..
$ make
[少し待つ]

# ここまで/Users/my_name/MultiNestへのインストールが完了。
# さらにPyMultiNestのための準備を行う。

$ cd ../lib/ #[MultiNest/lib に移動]
$ ls -l
-rwxr-xr-x 1 my_name staff 701512 19 Jan 19:21 libmultinest.3.10.dylib
-rw-r--r-- 1 my_name staff 814136 19 Jan 19:21 libmultinest.a
lrwxr-xr-x 1 my_name staff 23 19 Jan 19:21 libmultinest.dylib -> libmultinest.3.10.dylib
-rwxr-xr-x 1 my_name staff 715016 19 Jan 19:20 libmultinest_mpi.3.10.dylib
-rw-r--r-- 1 my_name staff 832704 19 Jan 19:21 libmultinest_mpi.a
lrwxr-xr-x 1 my_name staff 27 19 Jan 19:20 libmultinest_mpi.dylib -> libmultinest_mpi.3.10.dylib

# /Users/my_name/MultiNest/lib の中身を /usr/local/lib/ にコピーする。
$ sudo cp libmultinest.3.10.dylib /usr/local/lib/
$ sudo cp libmultinest.a /usr/local/lib/
$ sudo cp libmultinest.dylib /usr/local/lib/
$ sudo cp libmultinest_mpi.3.10.dylib /usr/local/lib/
$ sudo cp libmultinest_mpi.a /usr/local/lib/
$ sudo cp libmultinest_mpi.dylib /usr/local/lib/

# /Users/my_name/MultiNest/lib にある XXX.dylib の内容を持つ、 XXX.so という名前のリンクを作る。
# http://astrobetter.com/wiki/MultiNest+Installation+Notes の通りにすると一部不足する模様。全部やる。
$ sudo ln -s libmultinest.3.10.dylib libmultinest.3.10.so
$ sudo ln -s libmultinest.dylib libmultinest.so
$ sudo ln -s libmultinest_mpi.3.10.dylib libmultinest_mpi.3.10.so
$ sudo ln -s libmultinest_mpi.dylib libmultinest_mpi.so

# さらに、PATHをいじる。
$ cd
$ vi .bash_profile
[以下の内容を加える。]
#--------------------
# Added by me when installing MultiNest and PyMultiNest (19 Jan 2016)
export DYLD_LIBRARY_PATH=/Users/my_name/MultiNest/lib:$DYLD_LIBRARY_PATH
export PATH=$PATH:$HOME/.local/bin/
#--------------------
# 参考: http://johannesbuchner.github.io/pymultinest-tutorial/install.html#on-your-own-computer

# おそらく、MultiNest以外にも使う場合は
# http://johannesbuchner.github.io/PyMultiNest/install.html#id4 にあるように、
# $ export DYLD_LIBRARY_PATH=/Users/my_name/MultiNest/lib:/Users/my_name/cuba/lib:/Users/my_name/apemost/lib:$DYLD_LIBRARY_PATH
# のようにするのだろう(推測)。

(5)PyMultiNestインストール
$ cd
$ git clone https://github.com/JohannesBuchner/PyMultiNest.git
$ cd PyMultiNest
$ sudo python setup.py install

(6)テスト
(6-1)MultiNest
$ cd
$ cd MultiNest/bin
$ rm chains/*
$ ./eggboxC #binの中のプログラムなら何でも良い。

(6-2)MultiNest と mpi
$ cd
$ cd MultiNest/bin
$ rm chains/*
$ mpirun -np 6 eggboxC
これを走らせながら、新規ターミナルを開いて
$ top -o cpu
としてみる。いろいろ数字がモニターできる。

(6-3)PyMultiNest
$ cd
$ cd PyMultiNest
$ python -c 'import pymultinest'
# エラーメッセージがなければ良い。
$ python pymultinest_demo_minimal.py
# これでデモコードが走る。

 

※ が、翌日にpipが走らないという問題に遭遇した。 

一連のインストールに問題があると思い、いろいろ試したが、結局

python - Upgrading to latest pip caused ValueError - Stack Overflow

で解決した。

 

 

 

python pandas csvファイルを読み込む

(1) install

$ pip install pandas

Collecting pandas

....中略....

Successfully installed pandas-0.17.1

 

(2) 例

import pandas as pd

data1 = pd.read_csv('datafile.csv',sep=',')

for i in range(len(data1.OBJECT)):
     if ('U_' in data1.OBJECT[i]):
          print data1.vz[i]

 

データがdata1.OBJECT[i] みたいに格納できるのが便利。

yosemite [open filesを増やす]

yosemiteを再起動したら、どういうわけかfopenできる最大のファイル数が減った?ようでいままで動いていたプログラムが作動しなくなった。

(1)調べる
$ ulimit -a

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited


==> 「open files = 256 だったので1000個のファイルが開けなかった。」


(2)解決策

(a)一時的な変更でいい場合は
$ [sudo] ulimit -n 10240

(b)永続的な変更

$ cd
$ echo kern.maxfiles=10240 | sudo tee -a /etc/sysctl.conf
$ echo kern.maxfilesperproc=10240 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -w kern.maxfiles=10240
$ sudo sysctl -w kern.maxfilesperproc=10240
$ ulimit -n 10240 10240

$ cd
$ vi .bash_profile

".bash_profile"に以下の内容を加筆:
#----
# Added by me to increase the max number of open file (13 Jan 2016)
ulimit -n 10240 10240
#----

ヒント:「"i"でinsertモード、保存して終了するには "Esc" ":wq"」

 

(3)参考
http://blog.mact.me/2014/10/22/yosemite-upgrade-changes-open-file-limit

 

 

leapfrog 法による軌道計算

(1) leapfrog法

- 「Kick-Drift-Kick法」をimplementするために、簡単なKepler問題を解く。

- 重力場:質量1e11 Msunの質点

- 初期条件:(x,y)=(10, 0) kpc, (v_x, v_y)=(0, 100) km/s [eccentricity=0.77]

- 積分時間: 1 Gyr

- 積分timestep:(a) 1 Myr [1e3 steps] ; (b) 0.1 Myr [1e4 steps]

- (a) precession顕著。(b) precession無視可能。

- エネルギー誤差:(a) 15 %; (b) 0.5 % (during 1 Gyr)

- 計算時間:KDK (a) 7 ms; (b) 50 ms

参考までに、GSLの微分方程式のルーチンを使うと、20 ms (1 Myr / step)、 153 ms(0.1 Myr / step)。GSLでは、precessionはどちらのtimestepの場合も見られない。

>>> Kepler 問題を解く上では、GSLで何ら問題ない。ただし、多粒子になると、GSLのルーチンだけでは、計算時間が顕著に増えると予想される。「h=0.1 Myr, leapfrog」は計算精度、計算速度のバランス面で優れている。

>>> KDKの積分を行う関数を、「0.1 Myrの積分を10回行う」と記述すると、エネルギー誤差をおさえたまま9 ms 程度で計算できることが判明。つまり、KDKの計算時間は「関数の呼び出し回数」で決まる。 [追記2016/01/01]

 

(2) KDK法

timestep = h とすると、

v_(n+1/2) = v_n + a(x_n) h/2

x_(n+1) = x_n + v_(n+1/2) h

v_(n+1) = v_(n+1/2) + a(x_(n+1)) h/2

Springelの講義ノートでは、この2番目の式が間違っている(h が h/2 となっている)。

 

 

mac mini (yosemite) 不具合:Google Japanese Inputが原因か?

mac miniの調子がすこぶる悪い。

(1)セーフモードで起動=起動時に「Shift」を押しておく
>>> 起動に2時間近くかかったりする。
しばらくは普通に動くのだが、

(2)普通に起動
>>> 起動にx時間かかる(x>1)

(3)Apple Diagnostics=起動時に「D」を押しておく
>>> 「異常なし」

===
しばらくセーフモードで騙し騙し使っていたのだが、あるとき、
- Cannot start conversion engine. Please restart your computer.
- Failed to get current config values
などのエラーメッセージがでてきたので、これをもとに調べると、どうもGoogle Japanese Input(Google日本語入力)が悪さをしている模様。
>>> Google Japanese Input をアンインストール。

どうなることか。

 

>>> 治った。[追記。]