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環境など)

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

  3. Visual Studioなどの統合開発環境(IDE)を用いてインストールする (この資料では説明しない)

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.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用の資料を参照すること。

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

2-2.の方法#

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

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

Macの場合#

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

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

python             python3.10-config  python3.12-config
python-build       python3.10-gdb.py  python3.9
python-config      python3.11         python3.9-config
python3            python3.11-config  pythontex
python3-config     python3.11-gdb.py  
python3.10         python3.12     

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

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

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

pip install matplotlib
pip install pandas

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

ただし、~3.11以降、Pythonのライブラリ管理方針が変わったため、仮想環境の作成が推奨されるようになった。 詳しくはこちらの資料を参照のこと。

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に置き換えて使うと良い。

関連する事項#

最近(2023年以降)、pip install library-nameなどとすると、

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a Python library that isn't in Homebrew,
    use a virtual environment:
    
    python3 -m venv path/to/venv
    source path/to/venv/bin/activate
    python3 -m pip install xyz
    
    If you wish to install a Python application that isn't in Homebrew,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. You can install pipx with
    
    brew install pipx
    
    You may restore the old behavior of pip by passing
    the '--break-system-packages' flag to pip, or by adding
    'break-system-packages = true' to your pip.conf file. The latter
    will permanently disable this error.
    
    If you disable this error, we STRONGLY recommend that you additionally
    pass the '--user' flag to pip, or set 'user = true' in your pip.conf
    file. Failure to do this can result in a broken Homebrew installation.
    
    Read more about this behavior here: <https://peps.python.org/pep-0668/>

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

などとエラーメッセージが出ることがある。(Macの場合は上のaptの部分がbrewなどに置き換わっていはず) これは、Python Enhancement Proposal (PEP)と呼ばれる提案に関するもので、とくにそのPEP668に由来したメッセージとなる。

要は、Pythonのためのパッケージマネージャであるpipcondaと、 OSのパッケージマネージャであるbrew(Mac)やapt(debian系 Linux)がときに依存関係でconflictを起こすので、 「Pythonのパッケージもシステムのパッケージマネージャで管理をするか、仮想環境を作成するかしなさい」という趣旨のメッセージである。

これに対処する方法は幾つかあり、

  • 警告を無視して強制オプションをつけてglobal環境でpipする
    これはあまり推奨し辛い(急ぎだとやってしまうこともあるが…)

  • brewやaptなどのシステム用パッケージマネージャでのinstallを試みる
    但し、幾つかのPythonパッケージではうまく見つからないその場合は↓が選択肢筆頭となる。

  • Python仮想環境を作成して使用する
    エラーメッセージにもinstructionがあるように、pythonの仮想環境を作成し、activateした後pipを行う。
    Jupyter環境などでPythonコードを実行する際にも、作成した仮想環境をカーネルに選べば良い。

となるが、仮想環境を作成するのが最もトラブルが少なく良いように思う。 詳細は関連するページに譲る。