poetry+pyenv-winの環境構築の備忘録

### この記事is何

- poetry_pyenv-winの導入の備忘録。
- poetryについて
- tensorflow-gpuの導入まで

自分のPC環境と経緯
`windows 10 pro/pyenv/portry`で構築
以前はanacondaを使用していたが、pipでしかインストールできない最先端のライブラリが多すぎてanacondaに限界を感じたため、poetryに移行することにした。



### pyenv-win,poetryの導入

```
pyenv-winのインストール↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
git clone https://github.com/pyenv-win/pyenv-win.git ~/.pyenv_win

PATHを先頭に追加
C:\Users\ほげ\.pyenv_win\pyenv-win\bin
C:\Users\ほげ\.pyenv_win\pyenv-win\shims

この時点でshimsは存在しないが、これも通していいらしく、これを通さないと
pyenv versions
が認識されない

pyenv install -l
で使いたいpythonのバージョンを確認し

pyenv install 3.8.0
などと指定しpythonをインストール、tensorflow-gpuを使用したかったのでcolabの3.7.12と近づけて新しめの3.8.0を持ってきた

pyenv global 3.8.0
で全体にデフォルトで3.8.0を使うように設定。

poetryのインストール
Powershellで
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
この方法だとpoetryが1.2.0以上には新しくならないらしい。

↓にパスを通す
C:\Users\hoge\AppData\Roaming\pypoetry\venv\Scripts

バージョンを確認
poetry --version

> 仮想環境をプロジェクトのディレクトリ直下に作成するために、以下のコマンドを実行しておく
これはちょっとよくわかってないが、おそらくデフォルトで作られるプロジェクトの位置が何かの変数で定められていてそれを変更するものだと思われる。
poetry config virtualenvs.in-project true


```

### プロジェクト作成からパッケージインストールの流れ
anacondaに慣れていたので、若干戸惑った。以下の通り。

- 1.プロジェクトディレクトリに入る
- 2.仮想環境(shell)を起動
- 3.パッケージを追加・削除・スクリプトを実行など、anacondaでactivateした後のことがすべてできる。変更はpyproject.tomlに記載する/直接コマンドをたたく/poetry.lockに手を加えるなどの方法で行う。

```
poetry new projectname
で新しいプロジェクトを作成。↓のやつが作られる。

poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py


pyproject.tomlは依存関係を記したフォルダ。pipenvと似ていて便利
まだpoetry.lockは存在しない。

poetry shell
を使用した新しいシェルに切り替える。プロジェクト直下のディレクトリにいって行う。
シェルを切り替えることでなんかもろもろの処理が親プロセスに影響しないようにしているっぽい。
```

#### パッケージ追加方法

```
例えば
①
[tool.poetry.dev-dependencies]
直下に
[tool.poetry.dependencies]
pendulum = "^1.4"
等と記載して、

poetry installすると、
Poetryは pyproject.toml に並べられた全ての依存関係を解決し、それらのファイルの最新バージョンをダウンロードするだけです。
らしい。

②
または、poetry add hoge==x.x.xでもできるらしい。

この段階でpoetry.lockファイルが作成される。これは同じく依存関係を記したものっぽいが、さらに詳細な依存関係まで管理してるっぽい。これを使いまわしてチーム内での動く環境を揃えるらしい。
```


#### もし新しい環境にアップデートしたいときは
```

poerty.lockを削除してpoetry installするか、
poetry updateほにゃららを行うとできるらしい。

※poetryはpyproject.tomlを参照するので、例えば
lightgbm = "^3.3.0"は3.3.0以上4未満のパッケージまでしかアップデートできない。
もし4以上が欲しい場合はpyproject.tomlを編集する必要がある

試していませんが、こちらのブログでは、https://zenn.dev/canonrock/articles/poetry_basics
poetry add <パッケージ名>@latest
でもよいとあります。
```



### tensorflow-gpuの導入まで
rensorflowの導入はビルド済みテスト構成を見て、poetryでまずtensorflowgpuをインストールして、それに合わせてcuda,cudnnをインストールしてパスさえ設定できれば大丈夫です。この記事よりcuda+cudnnの入れ方の記事を見てください。

```poetryでtensorflowgpuの導入まで.
https://qiita.com/radiol/items/a27530fd33b7e4758e6dに記載のエラーとまったく同じエラーで詰まった。
https://qiita.com/radiol/items/a27530fd33b7e4758e6d
通りにやるとsolveエラーを解決できる

pyproject.tomlファイルのnumpy部分を
numpy = ">=1.19.2,<1.20.0"
に編集してpoetry updateすると以下の表示が出てダウングレードできたっぽい。

Package operations: 0 installs, 3 updates, 0 removals

  • Updating numpy (1.21.2 -> 1.19.5)
  • Updating llvmlite (0.36.0 -> 0.37.0)
  • Updating numba (0.53.1 -> 0.54.1)

```


#### cuda
すでに入ってしまっていたので、コントロールパネル＞プログラムのアンインストール的なところで「nvidia」でフィルタリングして削除した
その後アーカイブからtensorflowgpuと合致するものをインストール

#### cudnn
インストール、pathを通し手動作確認した。


##### path
一番下のcudnnpathだけ主導で通した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1347377/17210a08-3e6b-ea67-d488-cd89f2a3ac3d.png)


### poetryの理解

```

poetry shellした段階で.venvフォルダが作成される。
Creating virtualenv sample in C:\Users\ほげ\poetry-demo\.venvなどと表示される。

poetry-demo
└── .venvフォルダ
│    ├── Lib
│    │   └── site-packages
│    └── Scripts
│        ├── pip.exe
│        └── pytest.exe
│        └── python.exe
└── poetry.lock
└── pyproject.toml
└── tests
└── readme

Lib>site-packages
この中に仮想環境内でインストールしたパッケージが入っている。
例えばこの場合numpyやlightgbm等、、、
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1347377/1481c013-4761-53db-afba-5f1be1ed8cb9.png)

```
scripts
この中にpipやpython等が入っている
```

```poetry.lock
例
[[package]]
name = "numpy"
version = "1.19.5"
description = "NumPy is the fundamental package for array computing with Python."
category = "main"
optional = false
python-versions = ">=3.6"

numpyのバージョンや必要とするpythonのバージョンが記載してある事がわかる。
```






### 参考にさせていただいたブログ・情報

> https://tomiylab.com/2021/03/win-python/
> https://cocoatomo.github.io/poetry-ja/basic-usage/
> https://zenn.dev/canonrock/articles/poetry_basics