はじめに
本記事は筆者のPythonの環境構築を紹介したものになります。
筆者はjupyternotebookを用いたデータサイエンス用環境とDjangoを使うようの環境の2つを作っています。
jupyter環境内でも仮想環境をさらに分けて作れるし必要ないのでは?と思われるかもしれませんが、jupyter(conda)環境には対応していなくて、venv(pip)環境に対応しているモジュール/APIなどが存在します。なので、両方あったほうがなにかと便利になると思います。
なぜ環境を分けるのか
プログラムを作る際はプログラムごとに環境を作り直すことが必須といえます。なぜなら、プログラムごとに必要な追加モジュールやバージョンが異なるからです。
jupyter(conda)環境であればmaplotlibをインストールしますが、Webサイト構築用の環境にはこのモジュールはいりません。また、一方のプログラム内ではこのモジュールのver1.1を使わないと作動しないが、ほかのプログラムでは最新のverにアップデートしたいといった状況にも対応できます。以上のことから環境を分ける作業は必須です。
仮想環境
環境を分ける方法はいくつか用意されています。通常1つのパソコンには1つのPython.exeしか導入できないので1つしか環境は作れません。しかし、実際には仮想環境といわれるものを構築し、一つのOSに複数のPython環境を作ることが可能になっています。主観ですが仮想環境とはフォルダごとにプログラムファイルを保存することとイメージするとわかりやすいです。
筆者のPython仮想環境への考え
筆者はvenv環境が好きです。理由はjupiter環境は問題が起きた時対応が難しいと感じたからです。
venv環境はとても単純でどこにどのファイルがあるかすぐ把握できるのが魅力です。jupyterはあらかじめanacondanavigatorなどの便利ソフトが入ってるので、クリックで環境構築やインストールができてしまうのが魅力ですが、初心者は逆に何を行っているのか分かりづらいと思います。筆者も初心者なのでvenvのほうがわかりやすくて好きということです。
やってはいけないこと
jupyter環境はconda、venv環境はpipというツールを用いて動作します。問題はこのcondaとpipが競合してしまうことです。同じ環境内で両方のツールをインストールしてしまえばバグが起きてしまいかなり面倒です。
なので一般にこの両環境を合わせることはよくありません。混ぜるな危険。
本題:仮想環境の構築
Pythonの場合大雑把に言うとjupyter環境、venv環境、virtualenv環境があります。(ほかにもあるとは思いますが)。virtualenv環境とvenv環境は似ているのですが、公式ではvenv環境が推奨されています。jupyter環境はデータサイエンス用の環境となります。venv環境はその他、といった感じです。
結論を言いますと一つのユーザではこの2環境は両立できません。筆者はいろいろトライしましたが、うまくいかず、断念しました。なので筆者はユーザを2つ作ってそこでそれぞれの環境を作りました。
jupyter(conda)環境
まず、ユーザを新しく作ってそのユーザに切り替えましょう。
以降は2度手間ですので、以下のサイトを参照してください。
https://www.python.jp/install/anaconda/windows/install.html
venv(pip)環境
同じく新たなユーザを作ってください。jupyter環境のあるユーザでなければ問題はないのでその場合は現ユーザで作ってもいいと思います。
Pythonの導入→venvモジュールのインストール→venvコマンドで仮想環境作成といった流れです。
Pythonの導入は
https://www.python.jp/install/windows/install.html
を参照してください。やっていることはアプリのダウンロードとPathへの追加です。
venvのインストール、仮想環境の作成
どうやらPythonの標準ライブラリにvenvモジュールはあらかじめ入ってるようなので別途インストールする必要はなさそうです。
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e
これら環境は何が違うの?
jupyter環境はcondaモジュールを使ってパッケージの管理をします。
モジュールとは簡単に言うとpythonスクリプトです。pythonであらかじめあるdatetimeやos.pathなど使った経験があるかと思います。こういった機能が書かれたPYthonスクリプトがあらかじめPython.exeと一緒に同梱されています。これを標準ライブラリといいます。
https://docs.python.org/ja/3/library/index.html
これが標準ライブラリでvenvもありますね。
話を戻すとjupyterにはcondaモジュールがあり、これの機能はファイルのインストール、削除、アップデートなどなどです。コマンド上ではconda install ~~とうてば動作します。
一方venv環境はcondaではなくpipモジュールがあります。機能はcondaと同じで、pip install ~~とうてば動作します。
違いはこのパッケージ管理を行うモジュールです。実はこのモジュールごとに入れられるパッケージ(matplotlibやdjango、Celeniumなど)が違います。有名なライブラリはconda用、pip用で用意されていますが、根本的な構造は違うので動作速度や容量、やれることなどに差が出ます。
conda環境はデータサイエンス系のモジュールが豊富で充実していますが、pip環境はそれ以外の用途ではcondaに勝るモジュールを導入できることがあります。
以下URLでは筆者が実際に直面した問題になります。
https://teratail.com/questions/276416