▼ Python の実行方法
-------------------------------------------------
コマンドプロンプトにて、py ファイルのあるディレクトリで下記実行

python mainModule.py
-------------------------------------------------

▼ 基本用語
-------------------------------------------------
モジュールとは
# .py 拡張子のPythonファイル

モジュールが Python スクリプトにロードされる時の挙動
# ・モジュール内のコードを実行して初期化される。※初期化は一度切り。
# ・コード内のほかのモジュールが、同じモジュールを再び import した場合
#  - 再度ロードされることはない。
#  - モジュール内のローカル変数も、初期化は一度切り。シングルトンのように振る舞う。


-------------------------------------------------









▼ インポートされた関数を使うか、今いるモジュール内の関数を使うかコントロール
-------------------------------------------------
if __name__ == "__main__":
# もし、現在のモジュール名が __main__ である場合、つまり直接実行されたモジュールの場合

組み込みname 変数を知るフォルダを参照し、
2つのファイルをそれぞれ実行すればわかる
-------------------------------------------------



▼ デフォルトで実行されるコードをコントロール
-------------------------------------------------
Python には Java における main() のようなものはない。
暗黙的に、インデントレベル 0 のコードのみ実行される。
-------------------------------------------------




▼ ロジカルエラーとは。
シンタックスは正常。
しかし、期待通りの結果が生成されない場合、
ロジック内でエラーが起きている。












▼ なぜ異なる Python 環境をセットするか
-------------------------------------------------
・Python アプリをダウンロードしたときに、異なるバージョンのPythonにあわせるため
・プログラムのパーツの一部のバージョンが変わることで、互換性が保てなくなるよりは、ちゃんと動くバージョンの環境でパッケージするため
・共同作業をするメンバー間で環境を統一するため
・アプリをクライアントに渡す際に、クライアントのコンピュータでもちゃんと動くことを保証するため
-------------------------------------------------




▼ パッケージ及び環境管理ツール
-------------------------------------------------
Windows の場合は、COnda を使ったほうがわかりやすい気がする。
UNIX 系と違うし。
Windows で、いい感じに virtualenv を使いたい場合は、下記を参照
https://web.plus-idea.net/2017/02/python2-3-venv-virtualenv/
-------------------------------------------------
選択肢1.PIP と virtualenv 組
# Pythonパッケージマネージャ と 隔離環境作成ツール

選択肢2.Conda
# 構造がクリア
# R に使うことも可能
# 柔軟
Anaconda をインストールすれば、Conda と root environment がついてくる
- Conda
  - パッケージ及び環境管理ツール
- root environment は下記を含む
  - Anaconda インストール時に選択する、デフォルト環境
  - ベーシックパッケージ
-------------------------------------------------




■■ 選択肢1.PIP と virtualenv 組 ■■

▼ pipenv
-------------------------------------------------
pip install virtualenv

cd /c/Users/Yasuaki/Dropbox/01.study/Network/Python/udemyPython/Python_Basic/プロジェクト/マルバツゲーム/python-venv-test

# Python 2:
virtualenv env

# Python 3
python3 -m venv env


-------------------------------------------------









▼ virtualenv について
-------------------------------------------------
パッケージを切り分ける仮想環境を作る人
異なるプロジェクトの依存関係を別々に保つのに役立つ

新しいプロジェクトごとにvirtualenvを作成することをお勧め

絶対にやってはいけないのはSystem Pythonを使い続けること
# System Pythonは往々にして古いことが多く、またyumなどシステム上重要なシステムに依存しています。
# うっかり、 sudo pip install などしようものなら、環境を壊してしまう恐れがあります。
-------------------------------------------------















■■ 選択肢2.Conda  ■■


▼ 各環境の構成要素
-------------------------------------------------
# こんな感じの環境を複数作成できる
Package 4
Package 3
Package 2
Package 1
Python version X
-------------------------------------------------


▼ Conda(Anaconda)のディレクトリ構成
-------------------------------------------------
# C:\Users\Yasuaki\Anaconda3\pkgs\
キャッシュされたパッケージを格納

# C:\Users\Yasuaki\Anaconda3\envs\
ルート環境以外の環境を格納

# "C:\Users\Yasuaki\Anaconda3\python.exe"
コマンドラインアプリ用のPython.exe

# "C:\Users\Yasuaki\Anaconda3\pythonw.exe"
GUIアプリ用または UIレスアプリ用のPython.exe

# C:\Users\Yasuaki\Anaconda3\Scripts\
インストールされたパッケージの一部の exe たち
環境をアクティベートすると、このディレクトリがシステムのパスに追加される。
結果、フルパスなしで EXE が使用可能になる

# "C:\Users\Yasuaki\Anaconda3\Scripts\activate"
環境をアクティベートする

# "C:\Users\Yasuaki\Anaconda3\Scripts\jupyter-notebook.exe"
-------------------------------------------------




▼ Conda CLI
-------------------------------------------------
https://conda.io/docs/_downloads/conda-cheatsheet.pdf

# 環境作成
conda create --name mynewenv python=3.6

# 環境有効化
activate mynewenv
 # →アクティブな環境のEXEファイルがシステムパスに追加される

# 現在の環境を離れる
deactivate

# 他の環境をリストアップ
conda env list

▼ チャンネル操作
-------------------------------------------------
# パッケージちゃんねるを優先度最下部に追加
conda config --append channels newchannel

# チャンネルをリストアップ
conda config --get channels

# 特定のパッケージの、使用可能バージョンをリストアップ
conda search -f seaborn

# チャンネルにパッケージをインストール
conda install seaborn
conda install seaborn=0.7.0

# 新規ちゃんねる conda-forge に yaml パッケージをインストール
conda install -c conda-forge yaml

# アクティブなチャンネルのパッケージをアップデート
conda update

# 特定のパッケージをアップデート
conda update seaborn


# パッケージをリムーブ
conda remove seaborn
-------------------------------------------------




▼ パッケージ チャンネル
-------------------------------------------------
Conda がパッケージを探しにいくレポジトリの場所
# ストレージのように、各チャンネル単位に複数のパッケージが格納されている

# デフォルトは Continuum チャンネル

チャンネルリストにチャンネル追加時は、優先度最低で追加するのがグッドプラクティス
# 結果、デフォルトを上書きすることなく追加できる。

同じパッケージで、異なるバージョンが別々のチャンネルにインストールされている場合、
優先度 > バージョン
古いバージョンが、高優先度に入っていれば、古いバージョンが選択される
-------------------------------------------------



▼ 特定のパッケージのバージョンを、特定のバージョン以上にアップデートされないようにする
-------------------------------------------------
# C:\Users\Yasuaki\Anaconda3\conda-meta\pinned
# 上記ファイルを作成し、下記のように記述
seaborn 0.7.*
yaml ==0.1.7
-------------------------------------------------




▼ Python のバージョンを変更
-------------------------------------------------
# 使用可能バージョンを確認
conda search -f python

# バージョン指定してインストール
conda install python=3.6.5

# Python のバージョンを、そのバージョンの最新にアップデート
conda update python
-------------------------------------------------
