Pythonの環境構築

Windows11をお使いの方はこちらのノートブックも参照してください

手元で作業がしたい、という方に向けてローカル環境にPythonを導入する方法をOSごとに紹介する。

難易度としてはLinux < Mac << (壁)<< Windowsといった感じ(私見).

#動画貼り付け用
from IPython.display import HTML
from base64 import b64encode

Windowsの場合

いくつかの方針が考えられる。

  1. Pythonのインストーラを用いてインストールする

    • メリット: インストールが楽, GUI系のコード作成に向いている

    • デメリット: 他のプログラミング言語などへの拡張性が低い

  2. Linux環境を構築する(Python以外のプログラミング言語等を使用する予定がある場合こちらを推奨)

    • 2-1. Windows Subsystem for Linux(WSL)(推奨)

      • メリット: Windows環境を汚さない, Linuxシェル環境・パッケージマネージャ(Pythonに限らず各種インストールが楽)

      • デメリット: WSL特有の情報を調べる必要がある

    • 2-2. デュアルブート

      • メリット: Windowsとは別に好きなLinuxディストリビューションを共存させられる

      • デメリット: ディスク領域の分割などが必要 慣れないとデータを吹っ飛ばす危険あり
        (外部ストレージ等でのバックアップ必須です)

    • 2-3. その他 (Docker環境など)

      • このノートブックでは説明しない

1.の方法

HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/z2_nNvpgonY" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')

メニューからMicrosoft Storeを開き、pythonと検索する。

Python3.9~3.11あたりから選び[入手]する。

インストールしたpythonの使い方

Windows Terminal上で

python

もしくは

python.exe

と実行すると対話モードでpythonが開く。スタートメニューからpythonを起動しても同じ。

上の動画はやや古く、コマンドプロンプトを使用しているが、Windows Terminalを使用することを推奨する。

print("Hello World")

や、

for i in range(5):
    print(i)

などを実行してみよう。

Python(対話モード)を終了する際はCtrl+Z(もしくはCtrl+Cを実行後にCtrl+Z)→Enterを押すか、

exit()

と入力しEnterを押せば良い。

Python用のライブラリをインストールする方法

ターミナル上で

pip install matplotlib
pip install pandas
pip install Selenium

などとする。

ソースファイルの編集と実行

対話モードだと、長い処理を実現するのには向いていないので、
作業をソースコードとしてファイルに書き出し、それを実行したくなる。
実行したい場合は、コマンドプロンプト上で

python hogehoge.py

などとするとhogehoge.pyというファイルに書いた処理が実行される。

例: デスクトップにあるソースコードを実行する場合

chdir Desktop 

などして、適宜カレント(現在いる)ディレクトリの変更をするか

python Desktop/hogehoge.py

など実行するソースの(相対 or 絶対)パスの指定が必要になる。

2-1. の方法

Windowsの中にLinux(とくにUbuntu)を入れる方法

Windows11用の資料も参考になります。

HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/deZTrWYk9vU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')
  • 手順1.WSLの有効化

    コントロールパネルから[プログラム]->[Windowsの機能の有効化または無効化] を選択し
    「Windows Subsystem for Linux」にチェックを入れて有効化する(再起動が必要)

  • 手順2. Ubuntuのインストール

    Microsoft storeでUbuntuと検索し、1番目(単にUbuntuという名前のもの)か、
    あるいは20.04LTSをインストールする

    ※Windows OSのアップデートをしばらく行っていない場合、入手ボタンが押せない。
    一般論として、OSのマイナーアップデートは都度行うようにしましょう。
    (メジャーアップデートは場合による…)

  • 手順3.Ubuntuの起動・初期設定

    スタートメニューからUbuntuを起動する

    • Enter new UNIX username: Linuxで使うユーザー名を入力する

    • new password: パスワードを設定する

    • Retype new password: 確認のため再入力する

    これで、windows内にlinux環境が構築されます。

  • 手順4. aptのupdate/upgrade

    Ubuntuターミナルに以下を入力し実行

    $sudo apt update
    $sudo apt upgrade
    

    注:上の$は皆さんが入力すべきものではなく、
    Ubuntuターミナルにある$を指し
    Pythonの対話モードなどで打ち込む場合と区別するための表記。

    sudoはコマンドの頭につけることで管理者権限で実行する、という命令を意味します。
    実行時に、Ubuntu用に設定したパスワードが要求されます
    入力しても画面には表示されないので注意しながら打ち込んでEnterを押す。
    (間違っても再度入力を求めてくれますし、やめたければCtrl+C)

    aptはLinux(Debian系)のパッケージ管理システム
    ※PCの時刻設定がきちんと行われていないと、aptのupdate/upgradeに失敗します。

  • 手順5. Pythonのインストール

    Ubuntuには初めからPython3系が含まれていますが、
    pythonの最新バージョンをpip込みでインストールしましょう。

    $sudo apt install python3-pip -y
    

    これでpython3.xの最新バージョンと、python用のパッケージマネージャpipがインストールされる

  • 手順6. ライブラリのインストール

    ライブラリ・モジュールをインストールしたければ

    $pip3 install matplotlib
    $pip3 install pandas
    $pip3 install Selenium
    

    などを実行する。

Windows環境のどこにLinuxのファイルが保存されるか

C:\Users\XXX\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

のXXX部分(や場合によってはドライブ部分C:)を皆さんの環境に置き換えたものが、
Windows内に構築されたLinuxのルートディレクトリ(最上位のディレクトリ)となります。
Ubuntuを開くと、rootfs以下のhomeディレクトリにログインした状態でターミナルが開きます。

パスが上記と微妙に異なる場合は、
WindowsのユーザーフォルダからAppDataを開いて、
検索バーでUbuntuと検索すれば、
該当するディレクトリが見つけられるはずです。
(隠しフォルダを非表示にしていると見えないかも)

Windows11の場合は適当なフォルダ(エクスプローラー)を開くと
左側にLinuxのペンギンマークがあるので、そこから参照できます。

Linux側からWindows側のファイルにアクセスする

WindowsのディスクはLinuxからみた/mnt/以下にマウントされている。
たとえば、/mnt/c/Users/[ユーザー名]/Downloads で、Windows側のダウンロードフォルダのパスを指定できる。

OneDriveによるバックアップに含まれているフォルダは、
デフォルトパスから、OneDriveの下に変更されていることがあるので注意。

(例: デスクトップはLinuxから見ると/mnt/c/Users/[ユーザー名]/Desktopのはずだが、
デスクトップフォルダがOneDriveのバックアップ対象になっていると、
/mnt/c/Users/[ユーザー名]/OneDrive/Desktopなどと変更されてしまうので注意。)

WSLのバージョン確認と更新

Windows10を使っていてMS Storeから導入した方で
GUIを伴う処理を行いたい場合、WSLのバージョンを2にする必要がある。

以下の手順でバージョンを確認し、必要なら更新しよう

  1. スタートメニューからWindows PowerShellを開く

  2. PowerShell上で下記のコマンドを入力し、バージョンを確認する

    > wsl --list --verbose
    

    出力結果をみてUbuntuのVERSIONが1になっている場合
    更新を行おう

  3. 更新のための前準備として、https://aka.ms/wsl2kernel にアクセスし
    x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをダウンロードする。
    ダウンロードが終わったらパッケージを起動して、案内にしたがって実行する

  4. PowerShellに戻り、

    wsl --set-version Ubuntu 2
    

    を実行しwslのバージョンを2に変更する(そこそこ時間がかかる)

WSL環境でMatplotlibのshow()などを使う

WSL(今はUbuntu)では、そのままでplt.show()などの
ウィンドウを開くような操作が使えない。

その場合はx11とtkinterを含むpython3をインストールしよう

$ sudo apt update
$ sudo apt upgrde
$ sudo apt install language-pack-ja
$ sudo apt install x11-apps
$ sudo apt install python3-tk

さらにXサーバ(以下ではVcXsrvを選びます)をインストールする:

  1. https://sourceforge.net/projects/vcxsrv/ からDownload

  2. ダウンロードしたものを実行

    (デスクトップショートカットは無くても良い)

  3. スタートメニューからXLaunchを実行

    道なりに進んでAdditional parameters for VcXsrvの欄に-acを入力し進む

  4. “Save Configuration”を選択してショートカットを作成することで、次回以降同様の作業をしなくても良いようにできる

    $xlogo
    

    を実行するか、Pythonの対話環境の中で

    import matplotlib.pyplot as plt
    fig = plt.figure()
    plt.show()
    

    などとやってウィンドウが表示されればOK.

2-2.の方法

バックアップや起動ディスク等の知識なくデュアルブート環境を構築しようとすると
最悪の場合すべてのデータを失いますので、こちらを選ぶ場合は予め相談してください。

Linux環境を構築をすれば、あとはLinuxを起動し、以下のLinuxの場合の手順に従うだけ。

Macの場合

HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/X2FMQYpXtGY" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')

python2.xやpython3.x (xは購入機種・時期によって違う)が元々入っている。

Launchpadにある[その他]からターミナルを開き、
pythonと入力し、タブキーを2回押すと該当するものが表示される。
以下は一例:

python             python2            python2.7-config   python3-config     python3.7-config   python3.7m-config  pythonw            
python-config      python2.7          python3            python3.7          python3.7m         pythontex          pythonw2.7 

python3がある場合は、 $python3 と入力しエンターを押すと、pythonの対話モード(インタラクティブモードとも)が開く※。

※初回起動時はXcodeの導入が必要かもしれない
その場合は、ターミナルに

xcode-select --install

を打ち込みインストール作業を行う。
Xcodeのサイズがでかいので安定したネットワーク下で実行すること.

Python(対話モード)が起動できたら

print("Hello World")

などと打って、エンターを押すと、文字列"Hello World"が表示されるので試してみよう。

pythonの最新のバージョンやその他色々なものを導入したければ
今後のことも考えてMacにHomebrewと呼ばれるパッケージマネージャを導入しよう。 参考

Homebrewが導入できたら、

brew update
brew upgrade
brew upgrade python3

と順にターミナルで実行する(暫く掛かるかも).

※python3がもともとない場合は、3つめのものを

brew install python3

などと置き換える。

インストールに成功すれば、python用のパッケージマネージャ(pip)も使えるようになるはず。
以後は

pip install matplotlib
pip install pandas

などとすると、python用のモジュールがインストールされ、
pythonからいつでもインポートして使うことができる。

MacにDocker環境を入れておけば、aptで色々揃うので、レガシーコードの動作確認等にも役に立つ。

M1以降のApple制のCPUを搭載している場合、Pythonのパッケージ管理やDockerの導入などはやや難易度が上がる。 (※英語で調べれば必要な情報は出てくる)

Linuxの場合

Linuxを使っている人が、pythonのインストールができないとは思いにくいが…

ターミナルから

$sudo apt update -y
$sudo apt upgrade -y
$sudo apt dist-upgrade -y
$sudo apt autoremove -y

などを実行しパッケージマネージャのアップデート等を行った後
python3系がない場合は

$sudo apt install python3

ある場合は

$sudo apt upgrade python3

などを実行すればよい。

pipがない場合、

$sudo apt install python3-pip

を実行する。

Linux/Unix ターミナルの操作

Linux(WSL)やUnix(Mac)のCUI環境で必要な基本的な操作をまとめる

  • Ctrl+C: 入力内容の消去・実行中の作業の中断

  • Ctrl+D: ターミナル(タブ)を閉じる (Pythonの対話モードから出るときにも使う)

  • Tab: 入力を補完してくれる

  • *(半角アスタリスク): ワイルドカード記号

基本的なコマンド

  • cd “現在地”を変更する

$cd ./Desktop 
$cd ../ 
$cd ~
$cd -

1つめはhomeディレクトリからデスクトップ(があれば)移動
2つめは1つ上の階層に移動する
3つめはホームディレクトリに移動
4つめは直前にいたディレクトリに移動

  • ls ファイルやディレクトリなどを表示する.

$ls 
$ls ../*.txt
$ls Picutures/pic_*.png

1つめは現在いるディレクトリ以下のファイル等を表示
2つめは現在いるディレクトリの1つ上の階層にある.txt拡張子の全ファイルを表示
3つめは現在ホームディレクトリにいると仮定して、その直下にあるPictures以下にあるpngファイルのうち、冒頭がpic_のものを全て表示

  • mv ファイル・ディレクトリの移動・リネーム

    $mv aa.txt ~/Desktop
    $mv bb.txt ../AdDS/cc.txt
    

    1つめ: カレントディレクトリにあるaa.txtというファイルをデスクトップに移動
    2つめ: bb.txtを一つ上の階層にあるAdDSというディレクトリに移動し、cc.txtとリネームする。

    ワイルドカード*で複数ファイルを一気に移動させることもできる。ディレクトリの場合も同様。

  • mkdir ディレクトリを作る

$mkdir Desktop/AdDS2021
  • rm ファイルやディレクトリを削除する

$rm ./Desktop/report1.txt

ディレクトリを消すときは-rオプションが必要

$rm -r ./Desktop/AdDS2021
**rmコマンドで削除したものはゴミ箱に入れられずに削除されるので注意** 
特にワイルドカードを使って全て削除してしまうとバックアップを取っていないと復元は困難だし、誰も責任をとってくれない。
(rmコマンドにエイリアスを貼って、ゴミ箱を経由する命令に置き換えたりrmtrash(や類似のもの)を使用するのがオススメ)
  • grep 検索

$grep "Hello World" Desktop/AdDS2021/*py

タブ補完

Linux/Unixターミナルでは、タブによる入力補完が使えますので
ぜひ多用してください。

ちなみに今Desktopにいて、そこに
AdDS2019, AdDS2020, AdDS2021 というディレクトリがあり、
最初のものに移動したいとします。 こんなとき、いちいち

$cd AdDS2019

と打つのは面倒だし、打ち間違えたりします。

$cd Ad

と打った時点でタブをポンポンと叩くと、
Desktopに上記のフォルダ以外の”Ad”を含むディレクトリがなければ
AdDS20まで入力が補完され、
該当する候補(上の全てのディレクトリ)がターミナル上で表示されます。
その後1を打って再びタブを叩くと、該当するものは一つですので
(ambiguityがなくなった時点で)最後まで入力が補完されます。

ちなみにPython側からLinuxのコマンドを実行したければ

import os
os.system("ls *.txt")

などとすれば良い。

Linuxのホームディレクトリの変更

WSLを使用する際、Windows側から見るとLinux(Ubuntu)はC:\Users\username\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
といった階層に入っている。

Ubuntuを起動した際に開くターミナルの”位置”(これをホームディレクトリと呼ぶ)は、
上記のルートディレクトリ(rootfs)直下にあるhomeである。

たとえばWindows側のホームディレクトリ C:\Users\[username]以下に
適当なディレクトリを作って、それをUbuntuのログイン(ホーム)ディレクトリとして設定することも出来る。

※ 以下の操作では、emacsやvi(m)などのエディタに慣れていないうちは
システムファイルに余計な文字を書き込んでしまう危険性があるので
エディタの使い方を調べてから実行するなど、注意が必要です。
(不安な場合はZoomで画面を共有しながら一緒にやりましょう)

ホームディレクトリの変更方法は、

  1. Ubuntuターミナルから、管理者権限で/etc/passwdを開く
    たとえば、emacsが入っていれば

$sudo emacs /etc/passwd

なければ

$sudo vim /etc/passwd

でファイルを開きます。

  1. どこかに

Ubuntuユーザ名:x:1000:1000:"",,,:/home/ユーザ名:/bin/bash

といった欄があるので/home/ユーザー名部分を、
Windows側に作成しておいた新しくLinuxのホームディレクトリとしたいディレクトリの
パスに置き換えて、passwdを上書き保存し、閉じる。

  • Emacsの場合 編集は簡単. Ctrl+X -> Ctrl +Sを押して上書き保存. Ctrl+X->Ctrl+Cで閉じる.

  • vimの場合 iを押すとインサートモードに入り編集可能に. 編集モードから抜けるのはEsc. :wqで保存して終了

  1. Ubuntuを再起動し、エラー等が表示されず、
    pwdコマンドで現在地を確認して設定したディレクトリになっているか確認しましょう。

  2. もともとのホームディレクトリにあった.bashrc(エイリアスなどの情報を書くファイル)を 新しいホームディレクトリに移動させれば完了です。

$cp -r /home/[user name]/.*  ~/

隠しファイル/隠しフォルダ(dot files)について

Linuxでは、ファイル名の先頭に.がついているものは隠しファイルと呼ばれ、通常のlsコマンドなどの表示対象外となる。 隠しファイルを表示するには、lsコマンドに-aオプションをつければよい。

とくに、ホームディレクトリには、特定のアプリケーションの設定ファイルなどが隠しファイルとして保存されていることが多く、 数値計算ライブラリの開発や使用、ソースコードの編集・実行などの際には、隠しファイルを扱うこともある。

これら隠しファイルや隠しフォルダは、dot filesと呼ばれることもあり、 新しい端末を購入したときの設定ファイルの移行などにも使われる。

特に複数台の端末を使用している人などは、GitHubなどのリポジトリに自身のdot filesをアップロードしておき、 新しい端末を購入した際には、そのリポジトリからdot filesをダウンロードして使用することで、 移行をスムーズにしているようである(私は割とイチから設定するのが好きだったりします)。

以下では、代表的なものを少し紹介しておく:

.bashrc : bashの設定ファイル

エイリアスの設定などを書くことができる. エイリアスとは、例えばコマンドでpythonを使う際、いちいちpythonとかpython3.9などを 指定しなくてもお目当てのpython環境を使用できるようにするためのもの. 例えば、.bashrcに

alias py=python3.9

などと書いておけば、pyと打つだけでpython3.9が起動/使用できるようになる.

注意としては

  1. 使用しているシェルによって、設定ファイルの名前が異なることがある. 例えば、bashの場合は.bashrcだが、zshの場合は.zshrcとなる.

  2. 設定ファイルを変更した場合は、sourceコマンドを実行することで、変更を反映させる必要がある. 例えば、.bashrcを変更した場合は、

$source ~/.bashrc

とするか、ターミナルを再起動する必要がある.

エディタの設定ファイル

CUI/GUIを問わず、エディタの設定ファイルもホームディレクトリ直下の隠しディレクトリとして保存されることが多い.

例えば私の環境だと、~/.emacs,~/.vim,~/.vscode,~/.atomなど、今は使っていないものも含めて、 エディタの設定ファイルが保存されている。

sshの設定ファイル

SSHとは、スーパーサイエンスハイスクール…ではなく、Secure Shellの略で、ネットワーク上で安全にリモートコンピュータにログインしたり、 ファイルを転送したりするためのプロトコルである。

例えば研究室内に置かれたワークステーションやスパコンなど別の環境にログインして重い計算を回す、といったときには基本的にはssh公開鍵認証を用いてローカル環境からリモート環境にログインすることになるが、 その際に使用する鍵や、リモート環境へのログインに必要な情報などが、ホームディレクトリ直下の隠しディレクトリ~/.sshに保存される。

例えば、(sshを使ったことがある場合は)~/.ssh/configに、接続先のホスト名やポート番号などが記載されたり、 逆にリモート側では、~/.ssh/authorized_keysに、接続を許可する公開鍵が記載されていたりする。

なお、公開鍵認証とは、リモート環境にログインする際に、公開鍵と秘密鍵のペアを用いて認証を行う方式で、 秘密鍵はローカル環境に、公開鍵はリモート環境に置いておくことで、安全にログインを行うことができるものである。 秘密鍵の取り扱いに注意が必要であることは言うまでもない。

Pythonパッケージの管理

Pythonのパッケージは、上の一部でやったようにpipと呼ばれるパッケージマネージャを用いてインストールすることができる。
一方で、書籍などによっては、Anacondaと呼ばれるパッケージマネージャを用いてインストールすることを推奨しているものもある。
pipAnaconda(conda)は、それぞれ独自のパッケージ管理システムであり、 双方を混在させてパッケージをインストールすると、パッケージのバージョンの競合などが発生し、Python環境が破壊されてしまい、ライブラリのインポート時などにエラーが発生することがある。

そこで、パッケージの管理には、pipcondaどちらか一方のみを用いることを推奨する。
仮にpipを使うのであれば書籍等のライブラリのインストール作業でcondapipに置き換えたり、 condaを使うのであれば反対に、pipcondaに置き換えて使うと良い。