0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cygwinでpyenvを使う

Last updated at Posted at 2022-04-15

以前, Anacondaをcygwinで使うための記事を書きましたが, pyenvに乗り換えたので, cygwinでpyenvを使う方法を紹介します.
前回のAnacondaのときの知識をフル活用して, 自己流で設定を完了させました.
(Anacondaはアンインストール済みで, この記事の初期段階で入っているpythonはcygwinのpythonだけです. )

※pyenv-win==2.64.11で確認したもので、最新バージョンだとまた変わっており、動かなくなってました(2022/12/30)

導入手順

pyenvインストール

cygwinターミナルから, windows用にカスタマイズされたpyenv-winpip3でインストールします.

pip3 install pyenv-win --target $HOME/.pyenv

--targetには, pyenv関連のファイルを置きたい場所を設定します.

chmodで実行権限を付与します.

chmod 744 $HOME/.pyenv/pyenv-win/bin/pyenv*

cygwinの.bashrcに以下を追記します.

PYENV=$HOME/.pyenv/pyenv-win
export PATH=$PYENV/bin:$PYENV/shims:$PATH

winptyインストール

上記の設定のままでは, スクリプト実行はできるが, インタラクティブに弱く, cygwinからpython.batを呼んでも反応が返ってこない. (python.batは上で追記したパスの$PYENV/shimsの中にある)
Anacondaのとき同様, winptyで実行コマンドをラップしてあげるとよい.

https://github.com/rprichard/winpty からzipをダウンロード後, 展開して, ./configureしてmake.
build内のwinpty.exeを適当なところに移動. (コンパイルにはc++環境が必要)

cygwinの.bashrcに以下を追記して, pyenvコマンドをwinptyでラップします.
また, 各pythonコマンドはpyenv execで包んであげます.

alias 'pyenv'="/cygdrive/c/winpty-master/build/winpty.exe $PYENV/bin/pyenv.bat"
alias 'python'='pyenv exec python'
alias 'ipython'='pyenv exec ipython'
alias 'pip'='pyenv exec pip'
alias 'jupyter'='pyenv exec jupyter'

pyenv exec pythonのような表記はもともと$PYENV/shims/python(.bat)に記載されていたものですが, わざわざshims内のスクリプトを経由する意味は無いため, aliasで直接包んでやります.

pyenvスクリプトの編集

$PYENV/bin/pyenvファイルを以下のように書き換えます.

pyenv
#!/bin/sh
# before:
# cmd //c call "$(dirname "$0")/pyenv.bat" "$@"
# after:
cmd /c call "`cygpath -d $(dirname "$0")`/pyenv.bat" $*

この変更をしないと, シェルスクリプト内でpythonを呼んだときに

'ygdrive' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となってしまいます.

pyenvを設定する

pyenv versions

を実行すると最初は何も入ってません.

pyenv install --list

でインストールできるパッケージを確認し, 好きなバージョンをインストールします.

pyenv install 3.9.6
pyenv rehash

この状態では,

$ pyenv versions
3.9.6

となります.
この状態ではglobal設定がされていないため,

pyenv global 3.9.6

を実行してglobalなバージョンを指定してからは,

$ pyenv versions
* 3.9.6 (set by C:\Users\(ユーザ名)\.pyenv\pyenv-win\version)

となり, 正しく設定されました.

python/pip/jupyterを使ってみる

winptyでラップしたことで, 正しくインタラクティブに動かせました.
(python hoge.pyももちろん動きます. )

$ python
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>>

pipも使ってみます.

$ pip install tqdm
Collecting tqdm
Downloading tqdm-4.64.0-py2.py3-none-any.whl (78 kB)
|████████████████████████████████| 78 kB 581 kB/s
Requirement already satisfied: colorama in c:\users\(ユーザ名)\.pyenv\pyenv-win\versions\3.9.6\lib\site-packages (from tqdm) (0.4.4)
Installing collected packages: tqdm
Successfully installed tqdm-4.64.0
WARNING: You are using pip version 21.1.3; however, version 22.0.4 is available.
You should consider upgrading via the 'c:\users\(ユーザ名)\.pyenv\pyenv-win\versions\3.9.6\python.exe -m pip install --upgrade pip' command.

無事動きました.

jupyterも問題なく動かせました.

$ jupyter notebook
[I 14:26:20.464 NotebookApp] ローカルディレクトリからノートブックをサーブ: C:\Users(ユーザ名)
[I 14:26:20.464 NotebookApp] Jupyter Notebook 6.4.10 is running at:
[I 14:26:20.464 NotebookApp] http://localhost:8888/?token=(トークン)
[I 14:26:20.464 NotebookApp] or http://127.0.0.1:8888/?token=(トークン)
[I 14:26:20.464 NotebookApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。
[C 14:26:20.533 NotebookApp]

まとめ

winptyを使うとcygwin上でpyenv使える.

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?