python、ruby、go、node、haskell ... と複数の言語で開発しています。
各言語ごとに xxenv をインストールしていたのですが、さすがに home 直下も汚くなるし、統合的に管理したほうが何かと便利だと思って anyenv を入れようと思って嵌った。
結論
先に結論から。
既存の .xxenv を .anyenv/env/xxenv に mv しても上手く行きません!
anyenv に移行する人は、安直せずに anyenv で改めて各言語・ライブラリをインストールし直しましょう。
どうして上手くいかないのか
移行時の環境はこんな状態。
anyenv にはまだ何も入れていません。
$ ls -la | grep env
drwxrwxrwx 1 m-yoshimo m-yoshimo 4096 4月 24 21:51 .anyenv
drwxrwxrwx 1 m-yoshimo m-yoshimo 4096 4月 17 15:05 .pyenv
drwxrwxrwx 1 m-yoshimo m-yoshimo 4096 6月 18 2018 .rbenv
$ anyenv versions
$
試しに pyenv を移行しようと思いました。
さほどライブラリをインストールしているわけではないですが、python2 系と python3 系の両方を利用していたので、言語をインストールし直すのは面倒と思って、安直に mv したわけです。
$ pyenv versions
system
2.7.16
* 3.7.3 (set by /home/m-yoshimo/.python-version)
$ mv .pyenv .anyenv/envs/pyenv
すると、anyenv と python は見事に認識してくれました!
$ anyenv versions
pyenv:
system
2.7.16
* 3.7.3 (set by /home/m-yoshimo/.python-version)
$ which python
/home/m-yoshimo/.anyenv/envs/pyenv/shims/python
$ python --version
Python 3.7.3
しかし、これはぬか喜びでした。
pip を動かそうとすると。。。
$ pip list
/home/m-yoshimo/.anyenv/envs/pyenv/pyenv.d/exec/pip-rehash/pip: /home/m-yoshimo/.anyenv/envs/pyenv/versions/3.7.3/bin/pip: /home/m-yoshimo/.pyenv/versions/3.7.3/bin/python3.7: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
$ pyenv rehash
$ pip list
/home/m-yoshimo/.anyenv/envs/pyenv/pyenv.d/exec/pip-rehash/pip: /home/m-yoshimo/.anyenv/envs/pyenv/versions/3.7.3/bin/pip: /home/m-yoshimo/.pyenv/versions/3.7.3/bin/python3.7: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
rehash しても init しなおしても勿論ダメ。
どうも、直接ハードコードされているので、これを解消しないとダメな模様
$ grep -rn '\.pyenv' .anyenv/envs/pyenv/versions/ | head -n 10
.anyenv/envs/pyenv/versions/2.7.16/bin/2to3:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/aws:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/aws_completer:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/easy_install:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/easy_install-2.7:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/futurize:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/idle:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/jp.py:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/pasteurize:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
.anyenv/envs/pyenv/versions/2.7.16/bin/pip:1:#!/home/m-yoshimo/.pyenv/versions/2.7.16/bin/python2.7
...
python ファイルにハードコードされているということは。。。
$ grep -rn '\.pyenv' .anyenv/envs/pyenv/versions/2.7.16/lib/ | head -n 10
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/libpython2.7.a に一致しました
.anyenv/envs/pyenv/versions/2.7.16/lib/pkgconfig/python-2.7.pc:1:prefix=/home/m-yoshimo/.pyenv/versions/2.7.16
.anyenv/envs/pyenv/versions/2.7.16/lib/pkgconfig/python-2.7.pc:3:libdir=/home/m-yoshimo/.pyenv/versions/2.7.16/lib
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/BaseHTTPServer.pyc に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/BaseHTTPServer.pyo に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/Bastion.pyc に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/Bastion.pyo に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/CGIHTTPServer.pyc に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/CGIHTTPServer.pyo に一致しました
バイナリファイル .anyenv/envs/pyenv/versions/2.7.16/lib/python2.7/ConfigParser.pyc に一致しました
...
もちろんコンパイル済みの方にもハードコードされているわけです。
上記に見えるのは一部でしかなく、これらをすべて sed で置換するのも大変面倒なので、それするくらいなら各言語のバージョンとライブラリをインストールし直したほうが安全かつ楽ということでした。
試しに rbenv も mv でやってみましたが、同様の状況になったので諦めました。
おしまい
Top comments (0)