eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

programming

【環境設定編:続】Pythonプログラミング入門

Pythonプログラミング入門


さて
前回の記事では↓↓




プログラミング初心者がPythonの構文を学び
ある程度慣れてきて、自分の開発環境を整えたいな。。
という方に向けた内容でした。


今回の記事ではその続編として
さらに踏み込んだTipsを紹介していきます。






#1 仮想環境



前回の記事では具体的に
複数のPythonにおけるversionをどのように管理するのか
学び、ある程度理解が進んだと思います。


エンジニアの仕事に関わると
プロジェクト毎にversionを分ける事も良くある一方、
高い頻度で同一versionのPythonを複数のプロジェクト間で
使用する事例も出てくる事を知るでしょう。


さらに
Web開発やData分析など色合いが異なるプロジェクト毎に
依存するmoduleやpackageがある為
versionだけでなくそういった開発環境も区別する必要があります。


仮にそれらを区別せず1つのPython開発環境に混ぜていくと
互いのmoduleやpackage同士がconflictを起こし
容易にエラーの原因となる為、多くの時間を損失する事でしょう。


“仮想環境”はこういった問題解決に役立つソリューションです。


1つの箱を”仮想環境”と想像すると良いでしょう、
例えばPython3.6.2のversionをあるプロジェクトに使用すると決め
このversionを元に開発環境を整える場合、必要なpackageを
この箱の中にinstallしていきます。


プロジェクト毎に”仮想環境”を作成する事で
これらの”1つ1つの箱”は独立して管理する事ができ
環境単位でバックアップを取ったり、削除する事ができる
ようになります。


これを実現するためのPython用softwareは多く用意されており
エンジニアなら知っていて当たり前の知識でしょう。


本節ではそれらの内、比較的初学者向けな
導入しやすい物をいくつか紹介します

venv

venvはPythonにおけるversion3.3より新しいもの向けに開発された仮想環境ツールであり、Pythonを利用するエンジニアであれば一度は使った事があるsoftwareです。

pathを渡すだけで簡単に仮想環境を構築する事ができ、
version指定も行う事が可能となっています。

$ python -m venv ~/.virtualenvs/貴方の環境名

仮想環境の構築が完了したら、
以下のコマンドでactivateし環境に入る事ができます。
開発環境の名前は好きな名前をつける事ができるため
それぞれの環境を区別しやすいでしょう。

$ source ~/.virtualenvs/貴方の環境名/bin/activate

この仮想環境を抜ける際にはdeactivateコマンドを使用します。
これはactivateコマンドを実行済みの環境にのみ実行可能です。

(貴方の環境)$ deactivate

venvは良く作られたbuilt-inのvirtualenvプロジェクトであり、
virtualenvは追加のsoftwareを使用する事なく環境を構築できる
ツールであるが故に、いくつか興味深い特徴を備えています。

恐らく貴方が特定のversionのPythonでプロジェクトに関わる際
非常に良く使う仮想環境となります。

もし仮に複数のversionのPythonで切り替えて開発する予定がある場合
その限りではありません。
その場合は次に紹介するpyenvやcondaといったecosystemを使用すると良いでしょう。

pyenv-virtualenv

もし貴方がpyenvを使おうとしているのであれば、
pyenv-virtualenvはいくつかのcommandを提供し
仮想環境を管理するにあたりpyenvの機能を向上させることが可能です。

// 仮想環境の構築を行う
$ pyenv virtualenv 3.6.2 貴方の環境名

// 仮想環境のactivateを行う
$ pyenv activate 貴方の環境名

// 仮想環境を抜ける
(貴方の環境名)$ pyenv deactivate

僕は10個程のプロジェクトを良く掛け持ちしながら開発するのですが
この時作成する仮想環境もその都度切り替えながらコーディングを行います。


pyenv-vertualenvの良いところは
pyenvのlocal commandを使用して仮想環境が構築できる事と
yenv-virtualenがプロジェクト毎に最適な
自動activate機能を備え付けられている事です。

$ pyenv virtualenv 3.6.2 貴方のプロジェクト名1
$ pyenv virtualenv 3.6.2 貴方のプロジェクト名2
$ cd /Users/貴方のアカウント名/貴方のプロジェクト名1 
$ pyenv local 貴方のプロジェクト名1
$ (貴方のプロジェクト名1)$ cd ../貴方のプロジェクト名2
$ pyenv local 貴方のプロジェクト名2
(貴方のプロジェクト名2)$ pyenv versions
 system
 3.8.2
 3.8.2/envs/貴方のプロジェクト1
 3.8.2/envs/貴方のプロジェクト2
 貴方のプロジェクト1
* 貴方のプロジェクト2(/Users/貴方のアカウント名/貴方のプロジェクト名/.python-versionにセットされる)

このように
pyenvとpyenv-virtualenvは仮想環境を構築し
貴方の開発環境を整えてくれるでしょう。

conda

前回もcondaを紹介しましたが、condaの使用は
Pythonのversion管理を行うというより仮想環境を取り扱う意味合いの方が大きいです。

condaには仮想環境を管理するため
もともと、組み込み式のサポート体制が整っています。

// 仮想環境の構築
$ conda create --name 貴方の環境名 python=3.6.2 

// 仮想環境のactivate
$ conda activate 貴方の環境名

// 仮想環境を抜ける
(貴方の環境名)$ conda deactivate

condaはPythonがinstallされた状態でなければ
versionを指定する事で仮想環境にinstallする事ができます。

condaを実行する前にPython=3.8.2を用意する必要はありません。

#2 Package管理

貴方がエンジニアとしてプロジェクトに関われば、
多くの場面でいくつかのthird-partyなpackage(e.g. numpy, pandasなど)を必要とする事でしょう。


こういったpackageにはそれぞれの依存関係があり
Pythonが開発された初期の段階では手動でpackageファイルをダウンロードし
Pythonを指定する必要がありました。


今日、幸運な事に多くの献身的なエンジニアの貢献により
conflictを未然に防ぐ様々な種類のpackage管理ツールが提供されています。


その多くが仮想環境ごとにpackageを管理し
先ほどの”箱”で言うのであれば1つ1つの箱ごとに独立したプロジェクト
を進められる状態を作り上げてくれると言う事です。


それではいくつか紹介していきましょう。

pip

pip(pip install packages)は長年Pythonの
package管理ツールとしてde facto standardでした。

easy_installと言う初期のツールに強くインスパイアされたものであり、
Pythonではversion3.4より初期設定としてpipを組み込んでいます。

もし複数の仮想環境を持っている場合でも
それぞれ独立したpackage管理を行うことを実現可能です。

$ pyenv virtualenv 3.6.2 貴方のプロジェクト1
$ pyenv activate 貴方のプロジェクト
(貴方のプロジェクト1)$ pip list
Package    Version
-------    -------
pip        19.2.1
setuptools 40.11.0
 
(貴方のプロジェクト)$ python -m pip install requests
Collecting requests
  Downloading .../requests-2.22.0-py2.py3-none-any.whl (57kB)
    100% |████████████████████████████████| 61kB 2.2MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Downloading .../chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 1.7MB/s
Collecting certifi>=2017.4.17 (from requests)
  Downloading .../certifi-2019.6.16-py2.py3-none-any.whl (157kB)
    100% |████████████████████████████████| 163kB 6.0MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
  Downloading .../urllib3-1.25.3-py2.py3-none-any.whl (150kB)
    100% |████████████████████████████████| 153kB 1.7MB/s
Collecting idna<2.9,>=2.5 (from requests)
  Downloading .../idna-2.8-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 26.6MB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed packages

$ pip list
Package    Version
---------- ---------
certifi    2019.6.16
chardet    3.0.4
idna       2.8
pip        19.1.1
requests   2.22.0
setuptools 40.8.0
urllib3    1.25.3 

pip listは現在貴方がinstallしたpackageを
可視化する事ができます。

ここで注意しなければならないのが
pipをuninstallする時ですpipでは pip uninstall package名
これを行う事ができますが、これはrequestのみをuninstallしているのであり
そのpackageの従属物をuninstallしていません


一般的にプロジェクトごとのpackageの管理は
requirments.txtと言うファイルに記録を残しており、
このファイルには1行毎にそのpackage名と
versionが記載されています。

scipy==1.3.0
requests==2.22.0

このrequirments.txtファイルを用意しておけば
1つのpackageごとにpip installのコマンドを実行する事なく
pip install -r requirments.txtを実行する事で
ファイルに記載される全てのpackageを
特定の仮想環境にinstallする事が可能です。

#3 Pythonインタプリタ

もし貴方がさらなるPython開発環境の
カスタマイズが必要だと感じているのであれば
コマンドライン上でのPythonとのインタラクティブな
開発経験を得る事ができます。


このPythonインタプリタはread-eval-print loop(REPL)と言う
Shellにて引数を必要とせずPythonを実行できる環境のことです。

Python 3.6.2 (default, Jun 22 2019)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 4 + 2
6
>>> exit()

このREPLは貴方が何をタイプしたのかread(読み込み)
それをPythonコードとしてevaluate(評価)した後結果をprint(出力)します。


これがREPLが提供する主な機能です。
実行内容を即座に確認する事ができるため
Pythonの学習にも良いツールと言えるでしょう。

IPython

AnacondaのようにIPythonはPythonより
良いサポート環境が整ったツールであると言えます。

良いポイントとしてPythonのREPLツールに変わり
IPythonではコマンドの入力および出力1つ1つに
ラベリングされている事が挙げられます。
IPythonのinstallはpython -m pip install ipythonと簡単にでき
また実行は以下のように行います。

Python 3.6.2
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0.dev -- An enhanced Interactive Python. Type '?' for help.

In [1]: 4 + 2
Out[1]: 6

In [2]: print("hello world!")
Out[2]: hello world!

IPythonはTab補完と言う強力な特徴も備え付けており
グラフを可視化したい時に使用するpackagematplotlibとも
統合されています。

IPythonはJupyterの基本的なコンポーネントを有しており
特にData Scienceを行う上で必要なpackageも円滑に動作します。

このIPython REPLはとてもよく開発されたツールであり
Python初学者にとってはもちろん
エンジニアにとっても非常に役立つツールです。

まとめ

いかがだったでしょうか?

Pythonを利用しプログラミングを行う上で
開発を円滑に進める環境構築は重要な課題です。

特に今回紹介した内容な最も基本的なものであり
エンジニアならば知っておいた方が良いものばかりです。

自分のペースで学習を進め
楽しみながらプログラミングを学習していきましょう!





人気記事【初学者必見】効率的なプログラミング勉強方法を紹介します

人気記事 CS学位取得者がガチでプログラミングスクールを調査してみた件【おすすめのスクール】









このエントリーをはてなブックマークに追加
data-ad-format="rectangle" data-ad-format="rectangle"

返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

某国立大学大学院(理系)に所属しています。 最近の趣味は人工知能関連の論文を読む事で 研究ではComputer Vision周りを中心に活動しており、 サイドワークとしてデータ分析の業務に関わっています。 本ブログはこれまで筆者が学んできた様々な知識の中から 有益だと思えた情報のみをまとめたものです。 内容は個人の見解であり、所属する機関と関係するものではありません。 Research: is related to Computer Vision Hobby: is to study Artificial Intelligence / Machine Learning.