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)