登録日: 2020-07-28 更新日: 2020-07-28
前回は、最新の「CentOS」である「CentOS-8.2.2004」をUSB メモリにインストール して、GNOME デスクトップ環境をインストール しました。
今回は、そこに「 Python の学習環境 」を構築してみました。おかげで、Python の仮想環境についても勉強できました。 これで、小さなプログラムを作成しながら、学習できると思います。ゆくゆくはPython の開発ができるといいですね。
-
-
GNOME デスクトップ:
-
参考:
Red Hat 社が商用 Linux の「RHEL」のソースを公開しています。そのソースを使い、「CentOS Project」コミュニティが商標部分を取り除いてビルドし直した Linux ディストリビューションが、CentOS(セントオーエス)です。 商用のRHEL と機能的に高い互換性を持ちます。
つまり、無料でありながら、商用OS の品質があります 。
ただし、ミラーサイトや、リポジトリなどは違うので、インストールできるアプリに制限があります 。 サーバーでの使用がメインなので、必然的にデスクトップで使うアプリは少なくなります。しかたないことかな。
-
前回 からの続きです。
CentOS を起動します。
-
ブート選択のメニュー:
CentOS Linux (4.18.0-193.6.3.e18_2.x86_64) 8 (Core) CentOS Linux (4.18.0-193.e18.x86_64) 8 (Core) CentOS Linux (0-rescue-) 8 (Core)
3秒待ち
-
ログイン画面
パスワードを入れて、ログイン
-
デスクトップ画面が表示されます
-
CentOS に、Fedora 提供の「epel」リポジトリを追加
- 前回この作業は完了しています。(念の為に記載)
Fedora で検証された高品質のパッケージを RHEL や CentOS のような互換ディストリビューションでも使えるようにしたのが「epel」リポジトリです。 Fedora のすべてのパッケージが登録されているわけではありませんが、インストールできる可能性が高くなります。
CentOS では、「epel-release」のインストールで「epel」リポジトリが使えるようになります。
-
epel を追加:
$ sudo dnf install epel-release $ sudo dnf update
-
Python が使える環境にします:
Python の利点は、「パッケージ化された機能の再利用が簡単」なこと、「いろいろな機能のパッケージを無料で簡単に手に入れられる」ことです。これによりプログラミングの省力化ができるので人気があります。
-
まずは、Python の初期設定を見直します。
参考:
Red Hat Enterprise Linux 8 のPython事情
CentOS 8.2 にて確認:
$ cat /etc/centos-release CentOS Linux release 8.2.2004 (Core) $ cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
抜粋:
意見が半々だったので、ユーザの事情にあわせて「python」コマンドを python2 または python3 に設定できるように、定義なしになっています。
pythonスクリプトの
#!/usr/bin/python
のような記述は#!/usr/bin/python3
のように変更することが推奨されます。RHEL 8 の最小インストールでは「python3」コマンドが含まれず、システムツールで使われる
/usr/libexec/platform-python (no-python)
がありますが、ユーザ利用は推奨されません。設定方法は下記。詳細は man python(1) を参照:
-
alternatives コマンドにて、シンボリックリンクを操作して設定します
- 対話的に設定: alternatives --config python - Python 3 に設定: alternatives --set python /usr/bin/python3 - Python 2 に設定: alternatives --set python /usr/bin/python2 - デフォルトに戻す: alternatives --auto
-
python がインストールされているか確認:
$ python3 --version Python 3.6.8 $ python --version bash: python: コマンドが見つかりませんでした...
→Python3 はインストールされていますが、リンクされてません。
-
pip がインストールされているか確認:
$ pip3 --version pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6) $ pip --version bash: pip: コマンドが見つかりませんでした...
→pip3 はインストールされていますが、リンクされてません。
-
python でpython3 を呼び出せるようにします:
バージョンの切り替えは、「--config」を使用すると対話形式で選択できます。
バージョンの切り替え:
$ sudo alternatives --config python : 2 プログラムがあり 'python' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/libexec/no-python 2 /usr/bin/python3
→「2」を入力して、Enter
-
確認:
$ python --version Python 3.6.8
-
pip でpip3 を呼び出せるようにします:
参考:
How to change pip3 command to be pip?
→依存関係を維持しながら、使用するバージョンを登録できます
-
Linuxの場合:
$ sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
-
バージョンの切り替え:
$ sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
確認:
$ pip --version pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
-
alternativesでのステータス、優先度などを確認:
$ alternatives --display python python - ステータスは手動です。 リンクは現在 /usr/bin/python3 を指しています。 /usr/libexec/no-python - priority 404 スレーブ unversioned-python: (null) スレーブ unversioned-python-man: /usr/share/man/man1/unversioned-python.1.gz /usr/bin/python3 - priority 300 スレーブ unversioned-python: /usr/bin/python3 スレーブ unversioned-python-man: /usr/share/man/man1/python3.1.gz 現在の「最適」バージョンは /usr/libexec/no-python です。
-
$ alternatives --display pip pip -ステータスは自動です。 リンクは現在 /usr/bin/pip3 を指しています。 /usr/bin/pip3 - priority 1 現在の「最適」バージョンは /usr/bin/pip3 です。
-
実際のシンボリックリンクの確認:
$ ls -l /etc/alternatives/python lrwxrwxrwx. 1 root root 16 7月 24 02:53 /etc/alternatives/python -> /usr/bin/python3 $ ls -l /etc/alternatives/pip lrwxrwxrwx. 1 root root 13 7月 24 02:57 /etc/alternatives/pip -> /usr/bin/pip3
→/etc/alternatives/ にリンクが置かれて、バージョン管理されてます
-
端末にて、プログラムを実行してみます:
$ python Python 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
プロンプトに入力:
>>> print("Hello world!") Hello world!
→Enter キーですぐに実行されます。 昔流行ったBasic インタプリタみたいな使い方です。
-
終了:
>>> exit() $
→Ctrl+D でも終了できます。
-
プログラムファイルを作成して実行してみます:
フォルダを作成:
$ cd $ mkdir code
-
プログラムファイルを作成
$ nano ~/code/hello.py
↓ 下記を入力:
print("Hello world!")
→nano の操作は、Ctrl+O で保存、Ctrl+X で閉じます。
-
実行:
$ cd ~/code/ $ python hello.py Hello world!
-
pip について
「pip」は 、Python で書かれたパッケージ(外部のライブラリ)をインストールするときに使うツールです。 Python 本体に同梱されてます。
$ pip --version pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
→pip はとても古いバージョンでした。
-
ヘルプ表示(和訳と抜粋):
$ pip --help Usage: pip <command> [options] Commands: install パッケージをインストール download パッケージをダウンロード uninstall パッケージをアンインストール freeze インストールされたパッケージを要件の形式で出力 list インストールされているパッケージを一覧表示 show インストールされているパッケージに関する情報を表示 check インストールされたパッケージに互換性のある依存関係があることを確認 search PyPI リポジトリにてパッケージを検索 wheel 要件からwheel を構築 hash パッケージアーカイブのハッシュを計算 completion コマンド補完に使用されるヘルパーコマンド help コマンドのヘルプを表示
-
ポイントは、「pip のアップグレードは仮想環境で行うこと」です
- もし、pip を使ってアプリのインストールをするなら、後半に書いた「仮想環境」で作業するのがオススメです
仮想環境を作ってインストールすれば、システムと干渉しないので問題の発生が少なくなります。 完全に分離されているので、問題があっても仮想環境名のフォルダを削除するだけで済みます。
-
これ以降の記事は、システムが汚れるので、本番のシステムではやらない方が無難です。
「どのような問題が出るのか」の参考にしてください。
-
Python の環境の構築は、後半に書いた「仮想環境」を使った作業をオススメします
-
「Thonny」のインストール
構文チェックできるPython のエディタです。最近の「ラズパイOS」には、このアプリが入っているみたい。
最初の起動時に「Standard」か「Raspberry Pi」を選びます。
-
pip でthonny を検索:
$ pip search thonny : thonny (3.2.7) - Python IDE for beginners
-
pip でインストールします:
$ pip install --user thonny
→pip では、システムファイルを上書きしないために「sudo」は禁止されてます。 「--user」を付けてユーザのホームにインストールすることが推奨です。何かあっても安心です。
$ whereis thonny thonny: /home/ubn/.local/bin/thonny
-
pip でインストールの確認:
$ pip show thonny Name: thonny Version: 3.2.7 Summary: Python IDE for beginners Home-page: https://thonny.org Author: Aivar Annamaa and others Author-email: thonny@googlegroups.com License: MIT Location: /home/ubn/.local/lib/python3.6/site-packages Requires: astroid, asttokens, pylint, docutils, setuptools, jedi, mypy, pyserial, Send2Trash
-
thonny の実行:
$ thonny : ModuleNotFoundError: No module named 'tkinter'
→エラーしました。モジュールが不足しているみたい:
-
検索:
$ dnf search tkinter : python3-tkinter.x86_64 : A GUI toolkit for Python python38-tkinter.x86_64 : A GUI toolkit for Python
-
tkinter モジュールのインストール
$ sudo dnf install python3-tkinter : インストール済み: python3-tkinter-3.6.8-23.el8.x86_64 tk-1:8.6.8-1.el8.x86_64 tcl-1:8.6.8-2.el8.x86_64
-
tkinter モジュールの動作確認:
$ python -m tkinter
↓(「python -m」: path がないときは最新が選ばれます。)
tk This is Tcl/Tk version 8.6 This should be a cedilla: c [Click me!] [Quit]
→小さなtkinter のダイアログが表示されれば準備は OK
-
thonny の再実行:
$ thonny
「Th」の選択ダイアログが開きました
Langage: English →日本語 [ALPHA] Initial settings: Standard
(Standard 以外にラズパイが選べます)
→「Let's go!」をクリック
「Thonny」が起動され、ウィンドウが表示されました。
ファイルを開いて、プログラムを実行してみます
ファイル→Open... →「code」フォルダ→hello.py
「実行」ボタンを押してみます。
-
上の「hello.py」タブ
print("Hello world!")
-
下の「Shell」タブ
Python 3.6.8 (/usr/bin/python3.6) >>> %cd /home/ubn/code >>> %Run hello.py Hello world! >>>
→プロンプトは紫、その他はグレー。 実行結果の「Hello world!」は黒で表示されるので、わかりやすいです。
わざと後ろに余分な文字「 "
」を加え、間違えて、実行してみました:
→誤ったところを色を変えて、ちゃんと指摘してくれます。
-
参考: pip でthonny を削除するとき:
$ pip uninstall thonny : Proceed (y/n)? y Successfully uninstalled thonny-3.2.7
-
「Mu-editor」のインストール
シンプルなPython のエディタです。文字が大きいので見やすいです。
-
pip でmu を検索:
$ pip search mu : mu-editor (1.0.3) - A simple Python editor for beginner programmers.
-
pip でインストールします:
$ pip install --user mu-editor : Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib64/python3.6/tokenize.py", line 452, in open buffer = _builtin_open(filename, 'rb') FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-g2lty3mg/PyQtChart/setup.py' Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-g2lty3mg/PyQtChart/
警告が出てインストールできなかったので、検索すると 「pipを最新バージョンにアップグレードすると、この問題は解決しました。」がヒット
-
pipを最新バージョンにアップグレード: ←(これが失敗の元。仮想環境を使うべきでした)
$ pip install --user --upgrade pip : Successfully installed pip-20.1.1
→これは通常は、やってはいけないことだったみたい。これ以降、pip 操作すると警告が表示されるようになりました。 (ホームなら分離されているので、個人的にこうなることを理解してやるのはかまわないと思います。簡単にアップできます。でも、sudo は禁止)
$ pip --version WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip. Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue. To avoid this problem you can invoke Python with '-m pip' instead of running pip directly. pip 20.1.1 from /home/ubn/.local/lib/python3.6/site-packages/pip (python 3.6)
警告:pip は古いスクリプトラッパーによって呼び出されています。これは、pip の新しいバージョンでは失敗します。 根本的な問題の修正にについては、https://github.com/pypa/pip/issues/5599 を参照してください。
この問題を回避するには、pip を直接実行しないで、Python を '-m pip' を使って呼び出します。 /home/ubn/.local/lib/python3.6/site-packages/pip からの pip 20.1.1(python 3.6)
→新しくホームに新バージョンの pip をインストールしたことで、システムにあった旧バージョンの pip と重複したとの警告です。これはバグではなくて、運用のしかたの誤りで起きたこと。
ImportError in system pip wrappers after an upgrade #5599 を参照
pip の新しいバージョンが必要な場合は、仮想環境などを使用して、システムパッケージとは別にインストールする必要があります。このバグは仮想環境を使用していないときにpip のアップグレードをすると発生します。
「 python -m pip --version
」のように実行すれば、Python が認識しているpip のインストールの正確なバージョンと場所がわかり、一時的に回避できます。本来は、仮想環境を使うべきでした。
$ which pip ~/.local/bin/pip $ which pip3 ~/.local/bin/pip3 $ whereis pip pip: /usr/bin/pip /usr/bin/pip3.6 /home/ubn/.local/bin/pip /home/ubn/.local/bin/pip3.6 $ whereis pip3 pip3: /usr/bin/pip3.6 /usr/bin/pip3 /home/ubn/.local/bin/pip3.6 /home/ubn/.local/bin/pip3 /usr/share/man/man1/pip3.1.gz
参考: システムの pip :
$ dnf search python-pip : platform-python-pip.noarch : A tool for installing and managing Python3 packages $ dnf list platform-python-pip : インストール済みパッケージ platform-python-pip.noarch 9.0.3-16.el8 @anaconda
-
回避するには、pip を下記のように使います:
$ python -m pip <command> [options]
→「python -m」: path がないときは最新が選ばれます。
-
このやり方で、バージョン表示:
$ python -m pip --version pip 20.1.1 from /home/ubn/.local/lib/python3.6/site-packages/pip (python 3.6)
→バージョンがすごく上がってます。
-
このやり方で、インストール:
$ python -m pip install --user mu-editor
インストールやアップグレードのときは「--user」は必ず付けます。
→うまくインストールできました
-
このやり方で、インストールの確認:
$ python -m pip show mu-editor : Version: 1.0.3 Summary: A simple Python editor for beginner programmers. Home-page: https://github.com/mu-editor/mu Author: Nicholas H.Tollervey Author-email: ntoll@ntoll.org License: GPL3 Location: /home/ubn/.local/lib/python3.6/site-packages
-
mu-editor の起動:
$ mu-editor : ログ出力先: /home/ubn/.cache/mu/log/mu.log Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
→Python のプログラムファイルを実行させたタイミングで、Qt アプリでバージョン表示したときと同じようなエラーが表示されます。
-
→スッキリとした画面です。タイトルバーにある数字は、アプリのバージョンです。
-
参考: PyPI のライブラリにて、更新があるかの確認:
- PyPI (Pythonパッケージインデックス)は、外部に公開されている Python プログラミング言語用のソフトウェアパッケージ(ライブラリ)のリポジトリです。無料で公開されていて、Python のプログラミング時に利用が可能です。
-
パッケージに更新があるかの確認:
$ python -m pip list --outdated Package Version Latest Type ----------------- ---------- -------- ----- asn1crypto 0.24.0 1.3.0 wheel blivet 3.1.0 3.2.2 wheel cffi 1.11.5 1.14.0 wheel coverage 4.5.1 5.2.1 wheel cryptography 2.3 3.0 wheel dbus-python 1.2.4 1.2.16 sdist decorator 4.2.1 4.4.2 wheel idna 2.5 2.10 wheel iniparse 0.4 0.5 wheel isort 4.3.21 5.1.4 wheel langtable 0.0.38 0.0.51 wheel lazy-object-proxy 1.4.3 1.5.1 wheel Mako 1.0.6.dev0 1.1.3 wheel MarkupSafe 0.23 1.1.1 wheel matplotlib 2.2.2 3.3.0 wheel netifaces 0.10.6 0.10.9 wheel ntplib 0.3.3 0.3.4 wheel ordered-set 2.0.2 4.0.2 sdist pid 2.1.1 3.0.4 wheel ply 3.9 3.11 wheel productmd 1.11 1.26 wheel pycairo 1.16.3 1.19.1 sdist pycodestyle 2.4.0 2.6.0 wheel pycparser 2.14 2.20 wheel pycups 1.9.72 2.0.1 sdist pycurl 7.43.0.2 7.43.0.5 sdist pyflakes 2.0.0 2.2.0 wheel pygobject 3.28.3 3.36.1 sdist pykickstart 3.16.10 3.20 sdist pyOpenSSL 18.0.0 19.1.0 wheel pyparted 3.11.0 3.11.6 sdist PyQt5 5.14.1 5.15.0 wheel PyQtChart 5.14.0 5.15.0 wheel PySocks 1.6.8 1.7.1 wheel python-dateutil 2.6.1 2.8.1 wheel pytz 2017.2 2020.1 wheel pyudev 0.21.0 0.22.0 sdist pyxdg 0.25 0.26 wheel PyYAML 3.12 5.3.1 sdist QScintilla 2.11.4 2.11.5 wheel qtconsole 4.3.1 4.7.5 wheel requests 2.20.0 2.24.0 wheel requests-file 1.4.3 1.5.1 wheel setuptools 39.2.0 49.2.0 wheel simpleline 1.1 1.7 wheel slip 0.6.4 20191113 sdist urllib3 1.24.2 1.25.10 wheel
→最新のバージョンがインストールされているパッケージ(ライブラリ)は表示されません。
-
パッケージの更新のやり方:
$ python -m pip install --user --upgrade パッケージ名
-
インストールされているパッケージの一覧:
$ python -m pip list Package Version -------------------- ---------- appdirs 1.4.4 asn1crypto 0.24.0 : pip 20.1.1 : wrapt 1.12.1
-
参考: PyPI について
Python のプログラミング(プログラムの作成)では、欲しい機能はライブラリを活用、なるべく自分で作らずに省力化するやり方を取ります。基本的な機能は標準ライブラリにありますが、ない場合には外部から探して、あれば使います。
PyPI (Python Package Index) は、Python のライブラリを無料公開している最大のリポジトリ(配布元)です。
PyPI からライブラリをインストールするには、pip(The Python Package Installer)と呼ばれるパッケージ管理ツールを使うことで、インターネットを経由したインストールが簡単にできます。
Python の実行環境に外部ライブラリをインストールすると、標準ライブラリのパッケージと同じようにプログラムを作るときに、インポートして利用できます。
インストールするライブラリが、他のライブラリを利用している場合、つまり依存関係が発生するときがあります。 配布元が管理していれば、pip はライブラリの依存関係を管理する仕組み(site-packagesフォルダに落ちます)があり、ライブラリの依存関係を気にせずに使えます。
パッケージのダウンロード先の指定で、ローカルフォルダや git、PyPI 以外のパッケージ配布元からパッケージをインストールできます。省略するとPyPI からパッケージを取得します。
-
参考:
Pythonで作成したライブラリを、PyPIに公開/アップロードする
-
Visual Studio Code のインストール
人気の「VSCode」をインストールしてみました。
Visual Studio Code(略して VSCode )は、マイクロソフトが開発したオープンソース(MITライセンスでライセンス)のテキストエディタです。IDEの機能(統合デバッガー、コード補完、リンティングなど)もあります。独自のEULA の下でライセンスされています。
公式ビルドには追加の機能があり、VSCode マーケットプレイスから拡張機能ギャラリーを介して拡張機能をインストールできます。
-
参考:
Fedora wiki: Visual Studio Code
1. CentOS にて、キーとリポジトリを追加:
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc $ sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
2. パッケージキャッシュを更新、dnf でパッケージをインストール:
$ sudo dnf check-update Visual Studio Code 364 kB/s | 5.0 MB 00:14 $ sudo dnf install code : インストール済み: code-1.47.2-1594838045.el7.x86_64
-
3. Visual Studio Code の日本語化:
参考:
Visual Studio Codeを日本語化する「一番良い」方法は?【 全OS共通 】【 2020年最新版 】
1. Visual Studio Codeを起動
2. メニューの「View → Command Palete...」を開きます。
3. 「Configure Display Language」をクリック
4. 「Install additional languages...」をクリック
5. 左側に言語のリストが表示されます。「日本語」を探してクリックし、右の「Install」をクリック
6. 右下にリスタートを促すメッセージが表示されます。「Restart Now」をクリック
7. アプリが再起動され、日本語で表示されます。
→最初なので「ようこそ」タブが開かれています。
-
4. 「Python 拡張機能」のインストール:
事前に作成したプログラムファイルが役に立ちます。
-
1. ファイル→ファイルを開く→「code」フォルダ→「hello.py」→開く
新しいタブでファイルが開かれます→画面右下に下記が表示されます。
このファイル種類には、'Python' 拡張機能をお勧めします。
→「インストール」をクリック
3. 右下に、2つのダイアログが表示されているので、上側から確認
-
確認しておきます:
$ whereis python python: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python /usr/lib/python3.6 /usr/lib64/python3.6 /usr/include/python3.6m /usr/share/man/man1/python.1.gz
「Select Python Interpreter」をクリック
Enter interpreter path...
- Python 3.6.8 64-bit (/usr/bin/python) ←こちらを選択 - Python 3.6.8 64-bit (/bin/python)
→ウィンドウの左下に「Python 3.6.8 64-bit 」が表示されました。
-
4. 次のダイアログが開きました。
Linter pylint is not installed.
→「Install」をクリック
-
5. もうひとつのダイアログも確認
Tips: you can change the Python interpreter used by the Python extension by clicking on the Python version in the status bar
和訳:
ヒント:ステータスバーのPythonバージョンをクリックして、Python拡張機能で使用されるPythonインタープリタを変更できます。
→「Got it !」(了解)をクリック
-
5. 編集の続き
左上の「エクスプローラー」アイコン→フォルダーを開く→「code」フォルダ→hello.py →先ほどの編集画面が開きます。
もう一度「エクスプローラー」アイコンを押すと広くなります。
-
「Python - Get Started」タブが開きました。
-
6. Python の実行
「実行」→「デバッグなしで実行」→画面下のエリアに「ターミナル」画面表示
[ubn@localhost code]$ env /usr/bin/python /home/ubn/.vscode/extensions/ms-python.python-2020.7.94776/pythonFiles/lib/python/debugpy/launcher 36691 -- /home/ubn/code/hello.py Hello World [ubn@localhost code]$
「ターミナル」画面の右上の「x」で閉じます。
-
7. 通常のエディタとしても優秀です
→CentOS の(全体の map 表示ができる旧バージョンの)gedit とほとんど同じ見た目。ファイル表示は gedit よりも早いかも。
-
Python 環境の構築には「仮想環境」がオススメ
-
仮想環境とは
参考:
Python で開発をしていると、パッケージの依存関係があったり、それぞれのバージョン違いによる問題も出てきます。
Python の仮想環境は、「システム」の Python、すなわち OS の一部としてインストールされた Python にインストールされている全てのライブラリとは別です。
仮想環境は、追加でインストールしたモジュールやパッケージ、またPython のバージョンごとに分離されています。
それぞれの仮想環境には、それ自身に (この仮想環境を作成するのに使ったバイナリのバージョンに合った) Python バイナリがあり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。
仮想環境を作ってソフトウェアごとにバージョンの違うパッケージを用意すると、同じシステム内の環境を汚すこと無く開発が出来ます。
-
Python の仮想環境を作るソフトウェアは数種類あります。
-
参考:
この記事は:
デフォルトでインストールされている Python に影響を与えないよう、任意の場所(/opt/)に Python3.6 をインストール。この Python3.6 を使って、venv 環境を構築しています。
-
上記の記事を参考に作業しました。 別のバージョンをインストールするわけではありませんが、使い方の参考になります。
-
1. 事前の確認:
重要:
venv 環境を作成するときに使う python3.6 コマンドは、その環境で使うためにインストールした インストール先にあるPython3.6 を指定する必要があります。この環境が仮想環境名のフォルダ配下にコピーされます。
-
使用したいバージョンのpython3 の場所を確認:
$ which python3 /usr/bin/python3
venv のヘルプ表示(和訳):
$ /usr/bin/python3 -m venv --help 使用法: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR ...] 1つ以上のターゲットディレクトリに仮想 Python 環境を作成します。 位置引数: ENV_DIR 環境を作成するディレクトリ オプションの引数: -h, --help このヘルプメッセージを表示して終了 --system-site-packages 仮想環境にシステムのsite-packages ディレクトリへ のアクセス権を付与します。 --symlinks シンボリックリンクがプラットフォームのデフォルトで はない場合は、コピーではなくシンボリックリンクを 使用してください。 --copies シンボリックリンクがプラットフォームのデフォルトで ある場合でも、シンボリックリンクではなくコピーを 使用してください。 --clear 環境を作成する前に、環境ディレクトリがすでに 存在する場合は、その内容を削除してください。 --upgrade Python がin-place でアップグレードされていることを 前提として、このバージョンのPython を使用するよう に環境ディレクトリをアップグレードします。 --without-pip 仮想環境でのpipのインストールまたはアップグレード をスキップします。 (pipはデフォルトでブートストラップされます) --prompt PROMPT この環境の代替プロンプト文字を提供します。 環境が作成されたら、binディレクトリのactivate スクリプトにて、 有効化することができます。
-
2. venv で仮想環境を作成:
名前を「venv36」としてホームディレクトリ直下に作成しました。
作成前のファイル構成の確認:
$ ls ~/ code ダウンロード デスクトップ ビデオ 画像 mu_code テンプレート ドキュメント 音楽 公開
-
仮想環境の「venv36」を作成:
$ cd ~/. ←(最初に設定しておくことが重要) $ /usr/bin/python3 -m venv venv36
-
仮想環境のファイル構成の確認:
$ ls code venv36 テンプレート ドキュメント 音楽 公開 mu_code ダウンロード デスクトップ ビデオ 画像
→指定した仮想環境名の「venv36」フォルダが作られました。
$ ls ~/venv36/ bin include lib lib64 pyvenv.cfg $ ls ~/venv36/bin/ activate activate.fish easy_install-3.6 pip3 python activate.csh easy_install pip pip3.6 python3 $ ls ~/venv36/include/ $ ls ~/venv36/lib/ python3.6 $ ls ~/venv36/lib/ python3.6
→python コマンドを含めた、すべてのファイルが仮想環境のフォルダ配下につくられました。 Python バイナリのコピーまたはシンボリックリンクを含む bin サブディレクトリが作られました。
$ ls ~/venv36/lib/python3.6/ site-packages $ ls ~/venv36/lib/python3.6/site-packages/ __pycache__ pip-9.0.3.dist-info setuptools-39.2.0.dist-info easy_install.py pkg_resources pip setuptools
→「site-packages」フォルダは重要です。最初は空の状態で作成されます。もし、指定したディレクトリが存在している場合は、それが再利用されます。今回は、2つのパッケージがすでに入っています。(pip、setuptools )
-
仮想環境の設定ファイルの確認:
$ cat ~/venv36/pyvenv.cfg home = /usr/bin include-system-site-packages = false version = 3.6.8
→「pyvenv.cfg」ファイルの home キーはこのコマンドを呼び出した Python のインストール場所を指します。 よく使われるターゲットディレクトリの名前は「.venv」らしいです。
-
有効化に使われるスクリプトを確認:
$ ls -l ~/venv36/bin/activate -rw-r--r--. 1 ubn ubn 2196 7月 27 13:51 /home/ubn/venv36/bin/activate $ cat ~/venv36/bin/activate # This file must be used with "source bin/activate" *from bash* # you cannot run it directly :
→和訳: bashの場合は「source bin/activate」として使います。 直接実行はできません
-
3. 仮想環境の有効化
venv の仮想環境を有効化すると、プロンプトに仮想環境名 (venv36) が表示されます。
この状態で、pip コマンドなどでパッケージをインストールすると、この仮想環境の中でのみ有効なパッケージとしてインストールされます。
- OS 標準の環境や、他のvenv 環境には影響を与えません。
-
bash/zsh の場合:
[ubn@localhost ~]$ source ~/venv36/bin/activate (venv36) [ubn@localhost ~]$
→有効化には、仮想環境名の「~/venv36/」ディレクトリをパスの最初に加えます。 venv で仮想環境が有効化されると、プロンプトの先頭に (venv36) が表示されます。
「python」で仮想環境の Python インタプリタが呼び出されます。また、フルパスを入力せずにインストールされたスクリプトが実行できるようになります。
-
仮想環境の python と pip の置き場所:
(venv36) [ubn@localhost ~]$ which python3 ~/venv36/bin/python3 (venv36) [ubn@localhost ~]$ which python ~/venv36/bin/python (venv36) [ubn@localhost ~]$ which pip3 ~/venv36/bin/pip3 (venv36) [ubn@localhost ~]$ which pip ~/venv36/bin/pip
-
仮想環境の python と pip のバージョンを確認:
(venv36) [ubn@localhost ~]$ python3 --version Python 3.6.8 (venv36) [ubn@localhost ~]$ python --version Python 3.6.8 (venv36) [ubn@localhost ~]$ pip3 --version pip 9.0.3 from /home/ubn/venv36/lib64/python3.6/site-packages (python 3.6) (venv36) [ubn@localhost ~]$ pip --version pip 9.0.3 from /home/ubn/venv36/lib64/python3.6/site-packages (python 3.6)
-
仮想環境の pip の確認:
(venv36) [ubn@localhost ~]$ pip show pip Name: pip Version: 9.0.3 Summary: The PyPA recommended tool for installing Python packages. Home-page: https://pip.pypa.io/ Author: The pip developers Author-email: python-virtualenv@groups.google.com License: MIT Location: /home/ubn/venv36/lib/python3.6/site-packages ←(置き場所) Requires: You are using pip version 9.0.3, however version 20.1.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
→pip をバージョンアップしろと警告が表示されます。
-
仮想環境の pip のバージョンアップ:
(venv36) [ubn@localhost ~]$ pip install --upgrade pip Cache entry deserialization failed, entry ignored Collecting pip Using cached https://files.pythonhosted.org/packages/43/84/23ed6a1796480a6f1a2d38f2802901d078266bda38388954d01d3f2e821d/pip-20.1.1-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 9.0.3 Uninstalling pip-9.0.3: Successfully uninstalled pip-9.0.3 Successfully installed pip-20.1.1
確認:
(venv36) [ubn@localhost ~]$ pip show pip Name: pip Version: 20.1.1 Summary: The PyPA recommended tool for installing Python packages. Home-page: https://pip.pypa.io/ Author: The pip developers Author-email: pypa-dev@groups.google.com License: MIT Location: /home/ubn/venv36/lib/python3.6/site-packages ←(置き場所) Requires: Required-by:
→警告は出なくなりました。
-
$ pip --version pip 20.1.1 from /home/ubn/venv36/lib64/python3.6/site-packages/pip (python 3.6)
→pip のバージョンが上がりました。
-
置き場所の確認:
$ ls ~/venv36/lib/python3.6/site-packages/ __pycache__ pip-20.1.1.dist-info setuptools-39.2.0.dist-info easy_install.py pkg_resources pip setuptools
-
作成した仮想環境にインストールされているパッケージの確認:
(venv36) [ubn@localhost ~]$ which pip ~/venv36/bin/pip (venv36) [ubn@localhost ~]$ pip freeze (venv36) [ubn@localhost ~]$ (venv36) [ubn@localhost ~]$ pip list Package Version ---------- ------- pip 20.1.1 setuptools 39.2.0 (venv36) [ubn@localhost ~]$ pip show pip Name: pip Version: 20.1.1 Summary: The PyPA recommended tool for installing Python packages. Home-page: https://pip.pypa.io/ Author: The pip developers Author-email: pypa-dev@groups.google.com License: MIT Location: /home/ubn/venv36/lib/python3.6/site-packages Requires: Required-by:
-
4. 仮想環境でのパッケージのインストール:
(venv36) [ubn@localhost ~]$ pip install パッケージ名
→実際のインストール作業は後ほど書きます。
-
5. 仮想環境の無効化
(venv36) [ubn@localhost ~]$ deactivate [ubn@localhost ~]$
仮想環境を抜けたか確認:
[ubn@localhost ~]$ which python3 /usr/bin/python3 [ubn@localhost ~]$ python --version Python 3.6.8
→仮想環境名である (venv36) が表示されなくなり、 仮想環境から抜けたことがわかります。
-
仮想環境を作成する前は、
$ pip --version WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip. Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue. To avoid this problem you can invoke Python with '-m pip' instead of running pip directly. pip 20.1.1 from /home/ubn/.local/lib/python3.6/site-packages/pip (python 3.6)
→仮想環境を作らずに作業した影響で、pip がシステムの旧 とホームの新 とで重複しているとの警告が出てました。
この状態で、pip を使うには、最新を選んでくれるように下記の操作が必要です。
$ python -m pip --version pip 20.1.1 from /home/ubn/.local/lib/python3.6/site-packages/pip (python 3.6)
インストールのときは:
$ python -m pip install --user mu-editor
→少し面倒です。
-
仮想環境を作成した後から、警告が回避できるようになりました
仮想環境から抜けた状態:
$ which python3 /usr/bin/python3 $ which pip3 ~/.local/bin/pip3 $ which pip ~/.local/bin/pip
→pip だけ、置き場所がホーム (--user 指定で作られた ~/.local/bin/pip) に変わっています(仮想環境ではありません)。
-
$ pip --version pip 20.1.1 from /home/ubn/.local/lib/python3.6/site-packages/pip (python 3.6)
→通常のコマンドの使い方で実行できるようになりました。
この場合でも、インストールのときは下記の操作が必要です:
$ pip install --user mu-editor
→「--user」を付けて、ホームに落とします。付けないと推奨されていないシステムに落とそうとして失敗します。 仮想環境の場合は、仮想環境のフォルダに落ちるので、この気使いは要りません。
-
パスなどを再確認:
$ whereis mu-editor mu-editor: /home/ubn/.local/bin/mu-editor $ which mu-editor ~/.local/bin/mu-editor $ whereis pip3 pip3: /usr/bin/pip3.6 /usr/bin/pip3 /home/ubn/.local/bin/pip3.6 /home/ubn/.local/bin/pip3 /usr/share/man/man1/pip3.1.gz $ which pip3 ~/.local/bin/pip3
-
$ echo $PATH /home/ubn/.local/bin:/home/ubn/bin:/home/ubn/.local/bin:/home/ubn/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
↓ 見やすくすると:
/home/ubn/.local/bin: /home/ubn/bin: /home/ubn/.local/bin: /home/ubn/bin: /usr/local/bin: /usr/local/sbin: /usr/bin: /usr/sbin
→いつの間にかパスが張られていました。でも、先頭が重複しています。 こちらには仮想環境のディレクトリは含まれていません。
-
スタートアップファイルを確認:
$ cat ~/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific environment PATH="$HOME/.local/bin:$HOME/bin:$PATH" ←(パス指定はここ) export PATH ←(パス指定はここ) # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions
-
$ ls -l ~/.bashrc -rw-r--r--. 1 ubn ubn 312 11月 9 2019 /home/ubn/.bashrc
→日付は古いのでスタートアップファイルは修正されていませんね。最初からホームのパスは設定されていたみたい。
パスの指定は関係なかったみたい。先頭が重複しているのは、違うファイルでもパス指定されている可能性があります。
$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export LANG=ja_JP.UTF-8
-
$ ls -l ~/.bash_profile -rw-r--r--. 1 ubn ubn 165 7月 22 12:33 /home/ubn/.bash_profile
→日本語化のときに修正しただけでこれは関係なし。システム側の設定ファイルで指定されているのかも。
-
- どちらにしても、仮想環境のインストールで「重複の警告表示」が解消されました。
レビューにあった「仮想環境のインストールで解消されます」というのは、仮想環境を使うということだけでなく、この効果も指していたのかな。
-
実際に仮想環境でアプリをインストールしてみます
$ which python /usr/bin/python $ which pip ~/.local/bin/pip
→これが仮想環境に入る前の状態です。pip はホームのローカル指定に変わってます。
1. 仮想環境を有効化します
$ source ~/venv36/bin/activate (venv36) [ubn@localhost ~]$ (venv36) [ubn@localhost ~]$ which python ~/venv36/bin/python (venv36) [ubn@localhost ~]$ which pip ~/venv36/bin/pip
→仮想環境の python と pip が使われます。
-
(venv36) [ubn@localhost ~]$ pip list Package Version ---------- ------- pip 20.1.1 setuptools 39.2.0
→2つのパッケージだけが入っています。
-
(venv36) [ubn@localhost ~]$ pip --version pip 20.1.1 from /home/ubn/venv36/lib64/python3.6/site-packages/pip (python 3.6)
→仮想環境のpip が使われています。
-
(venv36) [ubn@localhost ~]$ echo $PATH /home/ubn/venv36/bin:/home/ubn/.local/bin:/home/ubn/bin:/home/ubn/.local/bin:/home/ubn/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
→先頭に仮想環境のパスが追加されてます。
-
2. 仮想環境で「thonny」をインストール:
構文チェックできるPython のエディタです。最近の「ラズパイOS」には、このアプリが入っているみたい。
最初の起動時に「Standard」か「Raspberry Pi」を選びます。
参考:
Pythonで書いたソースコードの実行の流れを実況中継してくれる初心者のための学習ツール「Thonny!」
-
- tkinter がインストールされていないと実行できません。
tkinter がインストールされていることを確認:
(venv36) [ubn@localhost ~]$ dnf list python3-tkinter : インストール済みパッケージ python3-tkinter.x86_64 3.6.8-23.el8 @AppStream
tkinter が動作することを確認:
$ python -m tkinter
→小さなtkinter のダイアログが表示されれば、準備 OK
-
thonny のインストール:
(venv36) [ubn@localhost ~]$ pip install thonny
-
確認:
(venv36) [ubn@localhost ~]$ whereis thonny thonny: /home/ubn/venv36/bin/thonny /home/ubn/.local/bin/thonny (venv36) [ubn@localhost ~]$ which thonny ~/venv36/bin/thonny
-
thonny の実行:
(venv36) [ubn@localhost ~]$ thonny 日本語 [ALPHA] WARNING:thonny:MyPy: /home/ubn/venv36/lib64/python3.6/site-packages is in the MYPYPATH. Please remove it. See https://mypy.readthedocs.io/en/latest/running_mypy.html#how-mypy-handles-imports for more info
→起動にて、ダイアログが表示されるので、日本語選択します。 プログラムファイルの実行をかけると相変わらず警告が出ます。
-
thonny の画面:
→右側の画面は、タブ切り替えでいろいろな情報が表示できます。この「アシスタント」タブは構文エラーがあったときに詳細を説明してくれます。ただし、英文。
-
(venv36) [ubn@localhost ~]$ pip list Package Version ----------------- ------- astroid 2.4.2 asttokens 2.0.4 docutils 0.16 isort 4.3.21 jedi 0.17.2 lazy-object-proxy 1.4.3 mccabe 0.6.1 mypy 0.782 mypy-extensions 0.4.3 parso 0.7.1 pip 20.1.1 pylint 2.5.3 pyserial 3.4 Send2Trash 1.5.0 setuptools 39.2.0 six 1.15.0 thonny 3.2.7 toml 0.10.1 typed-ast 1.4.1 typing-extensions 3.7.4.2 wrapt 1.12.1
→2つだけが、「thonny」のインストールでこんなに増えました。
-
3. 仮想環境で「mu-editor」をインストール:
シンプルなPython のエディタです。文字が大きいので見やすいです。
このアプリは、「BBC micro:bit」や「Adafruit 組み込みボード」の開発でよく使われるみたい。 「モード」ボタンで簡単に開発環境が切り替えできます。 「チェック」ボタンで構文チェックできます。
-
- pip が最新でないと、インストールに失敗します。
pip が最新であることを確認:
(venv36) [ubn@localhost ~]$ pip --version pip 20.1.1 from /home/ubn/venv36/lib64/python3.6/site-packages/pip (python 3.6)
-
もし、pip をアップグレードするときは:
(venv36) [ubn@localhost ~]$ pip install --upgrade pip
→仮想環境なので安心してアップグレードできます。
-
mu-editor のインストール:
(venv36) [ubn@localhost ~]$ pip install mu-editor
-
確認:
(venv36) [ubn@localhost ~]$ whereis mu-editor mu-editor: /home/ubn/venv36/bin/mu-editor /home/ubn/.local/bin/mu-editor (venv36) [ubn@localhost ~]$ which mu-editor ~/venv36/bin/mu-editor
-
mu-editor の実行:
(venv36) [ubn@localhost ~]$ mu-editor ログ出力先: /home/ubn/.cache/mu/log/mu.log Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
→ちゃんと動作します。ログの落ちるファイルはホームのローカルに落とした mu-editor と一緒ですね。
時々、終了時に「中止 (コアダンプ)」となりますが、動作には支障ありません。 端末にwayland on Gnome のときの、Qt アプリと同じような警告メッセージが表示されます。 Qt5 が使われているので、Qt アプリ だったみたい。日本語入力が可能 でした。
-
mu-editor の画面:
→「チェック」ボタンで、構文チェックをしてくれます。ウィンドウの左下のバーにやさしい日本語で返答が表示されます。 毎回押すたびに言葉づかいが変わります。「やさしい日本語」なのがポイントかな。
-
(venv36) [ubn@localhost ~]$ pip list Package Version ----------------- --------- appdirs 1.4.4 astroid 2.4.2 asttokens 2.0.4 backcall 0.2.0 certifi 2020.6.20 chardet 3.0.4 colorzero 1.1 cycler 0.10.0 decorator 4.4.2 docutils 0.16 gpiozero 1.5.1 guizero 1.1.0 idna 2.10 ipykernel 5.3.4 ipython 7.16.1 ipython-genutils 0.2.0 isort 4.3.21 jedi 0.17.2 jupyter-client 6.1.6 jupyter-core 4.6.3 kiwisolver 1.2.0 lazy-object-proxy 1.4.3 matplotlib 2.2.2 mccabe 0.6.1 mu-editor 1.0.3 mypy 0.782 mypy-extensions 0.4.3 nudatus 0.0.4 numpy 1.19.1 parso 0.7.1 pexpect 4.8.0 pgzero 1.2 pickleshare 0.7.5 pigpio 1.46 Pillow 7.2.0 pip 20.1.1 prompt-toolkit 3.0.5 ptyprocess 0.6.0 pycodestyle 2.4.0 pyflakes 2.0.0 pygame 1.9.6 Pygments 2.6.1 pylint 2.5.3 pyparsing 2.4.7 PyQt5 5.14.1 PyQt5-sip 12.8.0 PyQtChart 5.14.0 pyserial 3.4 python-dateutil 2.8.1 pytz 2020.1 pyzmq 19.0.1 QScintilla 2.11.4 qtconsole 4.3.1 requests 2.24.0 semver 2.10.2 Send2Trash 1.5.0 setuptools 39.2.0 six 1.15.0 thonny 3.2.7 toml 0.10.1 tornado 6.0.4 traitlets 4.3.3 typed-ast 1.4.1 typing-extensions 3.7.4.2 urllib3 1.25.10 wcwidth 0.2.5 wrapt 1.12.1
→「thonny」と「mu-editor」のアプリの追加だけで、こんなに増えました。
ちょっと確認:
(venv36) [ubn@localhost ~]$ whereis mu-editor mu-editor: /home/ubn/venv36/bin/mu-editor /home/ubn/.local/bin/mu-editor (venv36) [ubn@localhost ~]$ ls -l /home/ubn/venv36/bin/mu-editor -rwxrwxr-x. 1 ubn ubn 215 7月 28 01:51 /home/ubn/venv36/bin/mu-editor (venv36) [ubn@localhost ~]$ ls -l /home/ubn/.local/bin/mu-editor -rwxrwxr-x. 1 ubn ubn 202 7月 26 18:49 /home/ubn/.local/bin/mu-editor (venv36) [ubn@localhost ~]$ which mu-editor ~/venv36/bin/mu-editor
→同じアプリが存在しますが、仮想環境のアプリが選択されてます。
-
4. 仮想環境の無効化:
(venv36) [ubn@localhost ~]$ deactivate [ubn@localhost ~]$
→仮想環境から抜けました。
-
5. パスを指定すれば、仮想環境にインストールされたアプリも実行できます:
$ ~/venv36/bin/mu-editor
→ちゃんと動作します。
-
しばらく使ってみて気付いたこと
1. pip を使ってアプリのインストールをするなら、「仮想環境」がオススメです
仮想環境を作ってインストールすれば、システムと干渉しないので問題の発生が少なくなります。また、問題があっても完全に分離されているので、仮想環境名のフォルダを削除するだけで済みます。
特に、「pip」のアップグレードは要注意。システムにある(古い)pip と干渉します。
仮想環境で作業するのがベストです。気にせずにアップグレードできます。 pip を最新にしないとインストールできないアプリがありました。
-
2. pip を使ってインストールしたアプリ
→Qt アプリです。CentOS だと日本語入力できました。
-
3. GNOME のWayland にて、CentOS だと、Qt アプリで日本語入力できそうです
確認できたアプリが少ないのですが、希望が持てますね。
mu-editor(上記)
KolourPaint
-
4. CentOS は心配になるくらい、システム更新が少ないです
枯れた状態で公開されているので、当然といえば当然なんですが、Fedora とか Manjaro とかを使っていると気になります。
-
まとめ
CentOS は、安定動作と長期サポートが魅力です。一度使える環境にすれば、安心して作業できます。
ちなみに、Python の開発環境を構築するなら、Fedora の方が楽でした。すんなりグループでインストールできます。
CentOS でPython の開発環境を構築するなら、venv による「仮想環境」がオススメです。 システムと完全に分離されているので気楽にpip の操作ができます。
-
-
目次
- 前回 からの続きです。
- ブート選択のメニュー:
- CentOS に、Fedora 提供の「epel」リポジトリを追加
- Python が使える環境にします:
- python でpython3 を呼び出せるようにします:
- pip でpip3 を呼び出せるようにします:
- 端末にて、プログラムを実行してみます:
- プログラムファイルを作成して実行してみます:
- pip について
- 「Thonny」のインストール
- 「Mu-editor」のインストール
- 参考: PyPI のライブラリにて、更新があるかの確認:
- 参考: PyPI について
- Visual Studio Code のインストール
- Python 環境の構築には「仮想環境」がオススメ
-
-