2021個人的に最強だと思うPythonの環境構築

あとで読む

最初に

タイトルでだいぶハードルをあげてしまった気がしますが、どうか暖かい目で見てくださると幸いです。 Pythonの環境自分だったらこんな感じの構成にしてます。

という事です。

他にも環境構築の仕方は色々あると思うので、「こんな方法もあるよ」など教えて頂けると嬉しいです。

昔は「エラー」が出るとどうしてそうなったのか調べて分からないまま何日も過ごしてしまい。結局、スタックオーバーフロー等のコミュニティに助けを求めてました。

そこで解決すればいいのですが、中には環境依存だったり、何かの拍子でインストールしたパッケージと組み合わせが悪かったり、全てのエラーを潰していくにはシステム内部に精通してないとても時間がかかりそうな物もあったりします。

最近はそんなマニアックなエラーを調べるくらいなら、いっそ環境を壊して新しく作り直してまっさらな状態にして、それでもエラーが出るなら調べようスタンスでやって行こうと思ってます。

よく使用するPythonの環境が壊れても直ぐに新しく作り直せるように、普段使ってる環境構築の手順をまとめたものになります。

anaconda

個人的にはこれが好きで使ってます。condaコマンドとpipコマンドを共存させると環境が壊れる等、何かとソフトウェアごと壊滅的に環境が壊れやすいイメージですが、自身の環境では壊れる事なく動作してるので気に入って使用しています。

ubuntu18.04(vagrant)、MacOS HighSierraの両方にインストールして使っています。

構成

anaconda構成

環境構築の仕方としては仮装環境それぞれに独立したPythonをインストールして、そこに同梱されているpipを通してライブラリをインストールする。ライブラリ等も環境ごとにきっちり別ける事が出来ます。

ライブラリのインストールに conda install は使用しない。

これだとライブラリどうしの衝突等なく環境が壊れにくいです。

この構成とてもいいと思うんだけど、使っている人あんまりいないからなんでかなと思う。rootにインストールされているライブラリーを使用しないのが無駄に容量喰っていて無駄な気はする。

インストール方法

パッケージ

Macの場合、公式サイトからパッケージをダウンロードしてインストール手順にしたがっていけば無事に使用出来ます。PATHの設定もしてくれるのでターミナルで直ぐに conda コマンドが使用出来ます。

コマンドライン

公式サイトの一番下部にある 64-Bit Command Line Installer (428 MB) をクリックして、ダウンロードする。

ダウンロードが終わったら、安全のためファイルが改ざんされてないか調べるためにハッシュ値を計算する。(インストールする上では絶対必要な作業ではない。)

hasum -a 256 ダウンロードしたファイル名.sh

出力された値を公式サイトでダウンロードしたバージョンと同じか確認する。

確認出来たら、下記のコマンドでファイルを実行する。あとは手順に従う。

bash ダウンロードしたファイル名.sh

Ubuntuの場合、自分はVagrantで環境を作っているのでMacコマンドラインと同様の方法でインストールします。

ファイルをダウンロードして

bash ダウンロードしたファイル名.sh

を実行する。

PATHが自動で設定されない事がなるので

conda -V

でバージョンが出力されない場合は、.bash_profileをなければ作成して

export PATH=**~**/anaconda3/bin:$PATH と記述して保存する。

編集したファイルの更新をする事で

source ~/.bash_profile

PATHが通りでcondaコマンドの使用できるようになる。

仮装環境

ここからはcondaコマンドを用いて、実際に仮装環境を作成していく。

conda create -n 環境名 python

これで仮装環境ごとにPython・pipがインストールされた構成になる。 python=3.7 等でバージョンを指定してインストールする事ができる。この python の指定を忘れるとルートのPython・pipを使用することになるので注意が必要。

自分が今どこのPythonを使用しているか知りたい時は

which python

と入力する。

rootのPythonを参照している場合

ここは各々の環境で異なる/anaconda3/bin/python

仮装環境内のPythonを使用している場合

ここは各々の環境で異なる/anaconda3/envs/仮装環境1/bin/python

後者の状態でpipを使用してライブラリをインストールすると個別の環境が作れる。

これでPythonの環境が完成した。あとは好きに開発を始める。

よく使用するコマンド各種

いらなくなった仮装環境等を削除する方法を記述していく。

作成した仮装環境一覧

conda info -e

仮装環境内に入る。(PATHに切り替える。)

source activate 環境名

確か conda activate 環境名 でも入れるんだけど source を使用してる。推奨は canda の方だった気がする。

仮装環境内でライブラリ何がインストールされているか確認するのに使う。

pip freeze

これでpipインストールの一覧をテキストに書き出して

pip freeze > requirements.txt

新しい環境にまとめてインストールすれば直ぐにライブラリのインストールができる。

pip install -r requirements.txt

ただこれでまとめてインストールするといつもどこかでエラーが出て結果手打ちになるのであんま機能的でない。

pip uinstall -r requirements.txt

こうすればインストールしたライブラリ一覧を削除するのにも使える。ただインストール時にtxtに書かれていないライブラリもインストールされる事があるので、それらは削除されない。結果あんま機能的でない。

仮装環境から抜ける。

conda deactivate

仮装環境の削除

conda remove -n 環境名 --all

自分の環境だけかもしれないが仮装環境を作成する際にPythonをインストールせずrootのPythonを使用している仮装環境の場合これで削除しようとすると下記のようなエラーになる。

WARNING: The conda.compat module is deprecated and will be removed in a future release.

Remove all packages in environment /home/vagrant/anaconda3/envs/pyengine:

PackagesNotFoundError: The following packages are missing from the target environment:
  -

その場合は conda info -e で仮装環境のパスを調べて rm -rf /home/vagrant/anaconda3/envs/仮装環境1 で直接フォルダを削除する。その後、 conda info -e で削除されているのが確認できればいいと思う。もしかしたら仮装環境に切り替えるPATH設定があってそこに残るかもしれないが、それが存在するのかよく分からないしあっても容量は取らないから無視する。

たまに使う

conda社のレポジトリからライブラリーをダウンロードする。基本的には使わない。

condo install ライブラリー名 複数の場合は空白を入れてライブラリー名

node.jsをインストールして環境も作れちゃう。これで今環境構築して、Reactの勉強(チュートリアル)してる。

conda install -c conda-forge nodejs

conda-forgeはデフォルトのcondaインストールでアクセスする場所とは別の場所である。

オプション -cがチャンネル先を変更すると言う意味

インストールされたライブラリー確認

仮想環境下で実行すれば、仮想環境内でのインストールされたパッケージを確認できる。

conda list

公式のパッケージからシステムに直でインストールする。(Mac)

公式からパッケージをダウンロードして後は手順に従ってインストールする。

これもmacに元々入っているpythonと競合する事なくインストールされる。anacondaはpipからダウンロードしたライブラリとパスの関係等で相性が悪い場合がある。特にPythonスクリプトをexe・app形式に変換する。 cx_freezeと相性悪いのでこのライブラリを使用したい場合は公式のパッケージからインストールした方が無難だと思う。Python自体に仮装環境を作る venv pyvenv という物があるらしいが、Pythonの3.6から非推奨になった。公式のツールだとPython3.5から推奨されている venv を使用する。あとサードパーティ製ので virtualenv がある。2つとも上手く環境を分けれなかったのか使いずらかったかの理由で使ってない。

最後に

他にもこんな環境構築の仕方があるよ、ここは少しこうした方がもっと効率いいんじゃない等教えて頂けると嬉しいです。いまさらですが、dockerを使えるようになろうと勉強しているのですが、dockerを使えばこんな感じに仮装環境作らなくてもいいのではと考えたりしてます。

imageで一発で環境が作れるのをみてしまうと毎回pathを通したり、pipインストールしたりが無駄に見えてしまいます。

記事に関するコメント等は

🕊:Twitter 📺:Youtube 📸:Instagram 👨🏻‍💻:Github 😥:Stackoverflow

でも受け付けています。どこかにはいます。

参照

Python, pipでrequirements.txtを使ってパッケージ一括インストール | note.nkmk.me

Anacondaの仮想環境の削除で手間取った話 - Qiita