Python初心者に贈る、おすすめの環境構築 venv

# はじめに
2020年のコロナ禍にプログラミングを始めました。自己紹介にも書いているけど、大学の時にfortrunの単位を落としたリベンジ。w
で、ほとんどのPythonの初心者向けの本や講座、YouTubeなどは、まずAnacondaを勧められる。
ご多分に漏れず、僕もそうした。

で、しばらくしてDeep Learningに足を突っ込むんだけど、まぁ環境構築で苦労するのなんの。随分と時間をかけたし、苦労した。
そんな経験をしないようにおすすめを書いていこうと思う。
ということで、れっつご〜。

# 僕の環境
僕は会社ではWindows、家ではMacがメインでWindowsも使う。
なので、簡単に環境が作れて、管理できて、かつWin、Mac関係なくできることが肝心
qiitaは自宅で書いてるのでMacです。
2020 MacBook Air M1
python==3.10.8
pythonはAnacondaとかは使ってません。
こちらからダウンロードしたもの
https://www.python.org/

# 前提
Pythonがインストールされてること。
何より、ファイルパスの理解をしておいてください。絶対パスと相対パスは必須。どうせPythonを始めたらファイルパスがわからないと苦労するだけなんで、最初に理解してください。

# 環境構築の方法をざっと知る
様々な環境作成するためのソフトがある
面倒なので、ChatGPTに聞いてみた。

![スクリーンショット 2024-02-16 12.21.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/6071236c-d66f-f3e9-4d26-9ed635dc1732.png)
色々あるよね。メジャーなもので抜けてるのは```miniconda```くらいかな.
使ったことがあるのは先にも書いた```Anaconda```、```Miniconda```、そして僕がおすすめの```venv```くらい。なので、この三つで比較したいと思う。

# じゃおすすめは？
ズバリ、**venv**
異論は認める！だってその人が使いやすいならいいじゃん。

僕がそうだったみたいにプログラミング初心者がPythonを学ぶ時は
ぶっちゃけ**venv**でいいんじゃね？と思ってます。

理由は以下の通り
- 自分でどこに環境ファイルがあるか理解しやすい
- ファイルが管理しやすい
- 複数のプロジェクトやプログラムを作っていても、それぞれの環境の把握に頭を使わなくて済む
- venvが今までで一番苦労しなかった（理由になるのか？w）
- 今どき、ほとんどのライブラリは```pip```でインストール可能

Anaconda、Minicondaも優秀だと思うけど、以下が**初心者**にとってつまづきポイント
- 複数の環境を使い分けるのがめんどくさい（別でメモをするなど必要なことも）
- 環境が保存されているところまで見に行くのが面倒
- 容量を食う
- 大手企業さんだとAnacondaは有料になっちゃう

きっと数年前だと、Anaconda系は非常に便利だったと思うんだけど、その時代のことは知らない。
あと、プログラミングの勉強をするときはなるべく新しい本を使うのが良いと思う。
一部、古くてもとってもいい本もあるけどね。

# なんで仮想環境がいるの？
ですよね。最初は意味不明でした。
僕の理解は以下の通り。間違っていたら教えて欲しいです。
Pythonをインストールするとこんな感じ。正確にOSの上に載っているのかどうかは知らないけれど、とにかく、インストールしたPythonがある。
ここにさまざまなライブラリを入れていくと、意外と膨大なPython+ライブラリになってしまう。
例えばPytorchとか数百MBあるらしい。
![汚染.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/34eda794-2d4d-8906-f1e4-90dfbb796801.png)


- PyTorchは容量が大きい
https://blog.gelehrte.com/entry/EC2%E3%81%A7torch


となると、どんどんベースのPythonにライブラリを入れていくと、便利にはなるだろうけど、肥大化してしまいますよね。あと、ごく稀にライブラリ同士が干渉して壊れちゃったりする。（何度か経験あります）
なので作り替えできる方が安心。

ということで、
おすすめはインストールしたPythonをそのまま取っておいて、作業別にコピーしたものを使う方法。このコピーしたものが仮想環境だと思いましょう。（あってるかどうかは知らん。ごめん）
![おすすめ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/29531006-3bf2-2302-286d-b9df3c3effd7.png)

こうしておくと万が一仮想環境（図中の「Python（コピー）」）が壊れてもあっさり捨てて作り直せばいい。


# 僕のスタイルの紹介
まず、異論反論は認めます！w
あくまで僕のやり方です。
- 作業するためのフォルダを用意する（フォルダ名を作りたいものなどにしておくとわかりやすい）
- cmdやPowerShellなどで作業フォルダに移動
- そこに仮想環境を作る
- 仮想環境に入る
- 仮想環境から抜ける
- 仮想環境を破棄する

プログラムって初心者の頃は一つのファイルで行うことが多いともいますが、いずれ複数のファイルを連携して書くことになるので、作業管スペースを用意した方がいいと思います。
なのでどこか好きなところに作業フォルダを作りましょう。
例えばDesktopにworkspaceという作業スペースを作りましょう。こんな感じ。
```
Desktop/
└── project
```

あ、日本語はやめといた方がいい。文字コードっていう大敵が待ってる。w
いまだに僕は苦手。
ここに仮想環境をつくっちまえばいい。管理不要。だって作業スペースの中に仮想環境のファイルができるんだもん。

イメージはこんな感じ。デスクトップに`project`というフォルダにプログラムを書くこととします。
```
Desktop/
└── project
    ├── 「仮想環境ファイル」
    |
```

ここで少しあの黒い画面を触ります。怖いよね。
Macだとターミナル、Windowsだとコマンドプロンプト、PowerShell
ここで使うのは簡単なことだけ、これらのいずれかを開いて、```cd```（「cd」と半角スペース）を打って、そこに上で作った作業フォルダ「project」をドラッグ＆ドロップ。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333635353332302f38323963383032352d353136302d366234652d623437622d3838363630306537303362342e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/858dbdaf-4df3-4a31-1953-39547df12b19.png)


そしてリターンすると、作業フォルダ「project」に移動ができます。赤線のあたりを見てもらうと移動したことがわかります。
![スクリーンショット 2024-02-20 7.24.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/677abbd7-9ce0-b175-1b8a-d637b9858ec2.png)

ここで、以下を実行しましょう。（Macだと`python3`、ウインドウズだと`python`にしなきゃです）
```python
python3 -m venv 仮想環境名
```

例えば以下のような感じ
```python
python3 -m venv project_env
```

ウインドウズなら`python3 -m venv project_env`の「3」がなくてもOK

出来上がりは
```
Desktop/
└── project
    ├── project_env/
    |
```
こうすることで作業フォルダ内に仮想環境のファイルがあるので、幾つかの作業フォルダができてもそれぞれに環境を配置して管理が楽ちん。




# 以前つまづいたこと
よく、教科書的なサイトや本に書かれている方法
```python3 -m venv .venv```
これ、最初は理解できませんでした。w
なぜなら```venv```と```.venv```の違いがわからなかったから。
```.venv```は単なる仮想環境の名前なので、なんでもいいんですよね。そこに至るまで時間がかかった。w
しかも、「.」をつけて隠しファイルにする必要性もいまだにわからない。（誰か教えて！）
まぁ、半角英数ってことだけ気をつけておけば無用なトラブルもないでしょう。






# では仮想環境に入りましょう。（ワクワク）
### まず、Macやlinuxの場合
さっきの黒い画面（ターミナルやコマンドプロンプト）で```source```と半角スペースを打ちましょう。
その次にさっきの```python3 -m venv project_env```でできたフォルダの中の```bin```フォルダの中の```activate```をドラッグ＆ドロップして、
![スクリーンショット 2024-02-20 7.43.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/fd400e97-f946-e938-ac8a-9a47837f174e.png)

リターン
![スクリーンショット 2024-02-20 7.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/f57ec473-b502-cca9-6ab7-739e937fd9d9.png)

そうすると行の先頭が```(project_env)```から続く表示に変わっていたら仮想環境に入ってます。
![スクリーンショット 2024-02-20 7.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655320/0e1b3464-36a9-9f0a-8345-3c5ca313388a.png)

仮想環境から抜ける時はターミナルで```deactivate```と打ってください。




### 次にWindowsの場合
仮想環境の中のScriptフォルダ内に`activate`ファイルをcmdやPowerShellにドラッグ＆ドロップしてリターンすればOK
抜ける時はMac、linuxと同じく`deactivate`と打つだけ



# まとめ
ということで、多分実践的ではないかもしれないけれど、仮想環境で困った末に辿り着いた方法を書いてみました。
シンプルに書くと以下のような構成になります。

```
Desktop/
├── project
    ├── project_env/
    ├── aaa.py  
    ├── bbb.ipynb  
```
実際にはデータフォルダを追加したり、.pyファイルを一箇所にまとめたりというような事はやってます。
こんな感じ

```
Desktop/
├── project
    ├── project_env/
    ├── data/
    │   ├── abc.csv
    │   └── def.csv
    ├── src/
    │   ├── hij.py
    │   └── klm.ipynb
    ├── readme.md  
```

複数のプロジェクトが動いていても楽ちん
```
Desktop/
├── project1
│   ├── project1_env/
│   ├── data/
│   │   ├── abc.csv
│   │   └── def.csv
│   ├── src/
│   │   ├── hij.py
│   │   └── klm.ipynb
│   ├── readme.md  
├── project2
│   ├── project2_env/
│   ├── data/
│   │   ├── abc.csv
│   │   └── def.csv
│   ├── src/
│   │   ├── hij.py
│   │   └── klm.ipynb
│   ├── readme.md  
├── project3
│   ├── project3_env/
│   ├── data/
│   │   ├── abc.csv
│   │   └── def.csv
│   ├── src/
│   │   ├── hij.py
│   │   └── klm.ipynb
│   ├── readme.md  
```


ちなみにディスったAnacondaはこんな感じになります。(だいぶ忘れたけど）
仮想環境の保存場所がAnacondaに決められているというか、全然違うフォルダ内なんですよね。
僕には管理できませんでした。w
```
├── 仮想環境のフォルダ（正式な場所を忘れた）
│   ├── project_env1
│   ├── project_env2
│   ├── project_env3
│   ├── project_env4
...   
├── project1
    ├── aaa.py  
    ├── bbb.ipynb  
├── project2
    ├── aaa.py  
    ├── bbb.ipynb  
├── project3
    ├── aaa.py  
    ├── bbb.ipynb  
 
```

これができたらバリバリコードを書いていきましょう！
おすすめは、以前紹介したこちら。

https://www.udemy.com/course/python-beginner/?utm_source=adwords&utm_medium=udemyads&utm_campaign=LongTail_la.JA_cc.JP&utm_content=deal4584&utm_term=_._ag_107181210924_._ad_452531407122_._kw__._de_c_._dm__._pl__._ti_aud-2268488108799%3Adsa-930814700879_._li_1009461_._pd__._&matchtype=&gad_source=1&gclid=Cj0KCQiA5rGuBhCnARIsAN11vgSpP7SiT3RnfhBrLrenPS5K_GxQgmUWzosis2ZAruanjGXM4BfKxJwaAou8EALw_wcB&couponCode=JPLETSLEARNNOW

おしまい