質問: プログラミング勉強中なのですが、仮想環境という概念がイマイチ分からないので自分の認識があっているか質問させてください。 プログラミング勉強用にUbuntu LTS 18.04をホストOSとしてインストールしました。デフォルトではPython 3.6.9が入っています。 今まで特に意識していなかったのですが、今回はローカル環境をあまり汚さず作業をしたいのでPythonの仮想環境を作ってそこで作業をしたいと考えています。 そこで現状の自分の認識が合っているか確認したいです。 1. Ubuntuをインストールした段階で初期から入っているソフトなどの中にPythonを使っている物があるので、Python3.6.9とそれらソフトの動作に必要十分なPythonライブラリが入っている。 2. Pythonの最新版である3.8を使いたいのと、ローカルにライブラリ入れすぎて管理できなくなるのが怖いので仮想環境を作ることで解決したい。 3. Python3.6.9が入っているので標準ライブラリである”venv”が使える。 4. 新規のディレクトリを作成し”venv”で仮想環境を作成、そのディレクトリ内のみで稼働するPython3.8や任意のライブラリの入った環境を作れる。 5. 環境が壊れてもディレクトリを削除すれば別途pipインストールしたライブラリも消える 6. Python3.8で動かしたい、または別途入れたライブラリを動かしたいPythonスクリプトを書いたら.pyファイルを仮想環境ディレクトリに移動させてターミナルから.pyを動かせば問題なく動く(またはそもそも仮想環境下でコードを書いて実行でもいいですが) 以上の認識はあっていますでしょうか?数が多いのでここが間違っているなどお教えいただけると幸いです。 不勉強な質問ですがよろしくお願いいたします。 追加での関連質問なのですが、データ分析などで有名なAnacondaディストリビューションは仮想環境だと聞きました。それは上記のような仕組みなんでしょうか。 つまりどこかにAnacondaというディレクトリが作成されて”conda”コマンドでインストールされたライブラリはその仮想環境内で保存され、Jupyter notebookやSpyderなどから使用できる。Anacondaをアンインストールしたらそれらも消える。 という認識であっていますか?
回答: > > 1. Ubuntuをインストールした段階で初期から入っているソフトなどの中にPythonを使っている物があるので、Python3.6.9とそれらソフトの動作に必要十分なPythonライブラリが入っている。 > > > おそらく、はい。 「初期から入っているソフト」が、Ubuntuが用意した `python3-xxxxx` といったパッケージに依存している場合、Ubuntu標準でインストールされているPython-3.6.9にそれらのライブラリがインストールされます。 しかし、「初期から入っているソフト」が独自にvenv等の仮想環境を用意してそのなかに依存ライブラリを入れる可能性もありそうです。 > > 2. Pythonの最新版である3.8を使いたいのと、ローカルにライブラリ入れすぎて管理できなくなるのが怖いので仮想環境を作ることで解決したい。 > > > 仮想環境を作るか、Pythonを複数バージョンインストールすることで解決できます。 仮想環境には「VMWaeやVirtualBoxのような仮想マシン」と、「Pythonの仮想環境」がありますが、文脈から後者のことかと思います。 今回の場合、「最初からインストールされているPython-3.6以外に、Python-3.8もインストールしたうで、Python-3.8を使ってvenvでPython仮想環境を作る」必要があります。 「venvでPythonの仮想環境をつくってそこにPython-3.8をインストールする」ということはできません。 pyenvやcondaであればそういったこともできそうに見えますが、考え方はあくまで「Python-3.8もインストールしたうで、Python-3.8を使ってPython仮想環境を作る」ことになります。 > > 3. Python3.6.9が入っているので標準ライブラリである”venv”が使える。 > > > Ubuntuの場合は「いいえ」です。 Python-3.5以降、デフォルトでvenvが使えるのですが、Ubuntuはvenvを取り除いて別パッケージにしてしまっているため、デフォルトではvenvが使えません。 Ubuntuで `venv` を使うには、 `apt install python3-venv` を実行してインストールする必要があります。 > > 4. 新規のディレクトリを作成し”venv”で仮想環境を作成、そのディレクトリ内のみで稼働するPython3.8や任意のライブラリの入った環境を作れる。 > > > はい。 ただし、前述したように「仮想環境にPython3.8をインストールするのではない」ことに注意して下さい。 以下のコマンドのように実行して、Python-3.8で仮想環境を作る必要があります。 ``` $ python3.8 -m venv my-venv-dir $ source my-venv-dir/bin/activate (my-venv-dir) $ python3 -V Python 3.8.0 (my-venv-dir) $ pip3 install requests (my-venv-dir) $ pip3 list ``` my-venv-dir 仮想環境を有効化するのに `my-venv-dir/bin/activate` を実行しています。 その後で実行した `pip3` コマンドでは、 `my-venv-dir` 仮想環境へのインストールやインストール済みの一覧などを確認できます。 > > 5. 環境が壊れてもディレクトリを削除すれば別途pipインストールしたライブラリも消える > > > はい。 上記例で言えば、仮想環境を有効化した状態で `pip3 install requests` でインストールしたライブラリ群は `my-venv-dir` ディレクトリ以下にのみインストールされているため、ディレクトリを消せば消えます。 > > 6. Python3.8で動かしたい、または別途入れたライブラリを動かしたいPythonスクリプトを書いたら.pyファイルを仮想環境ディレクトリに移動させてターミナルから.pyを動かせば問題なく動く(またはそもそも仮想環境下でコードを書いて実行でもいいですが) > > > いいえ。スクリプトがどのディレクトリにあるかは関係ありません。 「有効化したPython仮想環境」で動作させてください。 Python仮想環境を有効化するには、 `source my-venv-dir/bin/activate` を実行します。 あるいは、 `my-venv-dir/bin/python3 script.py` のように、仮想環境内のpythonコマンドを使ってスクリプトを実行してください。