VS CodeでSSH接続。Pythonの仮想環境、lint機能。

VS CodeでSSH接続の設定をしてPythonを実行しようとすると、英語のwarnigやドロップダウンリストが次々と現れるし、どの仮想環境を使っているのか分からない。でも、分からずに次に進んでしまうと気持ちが悪い。

すっきり、Pythonの実行ができるように仮想環境の指定方法と、lint機能、デバッグ機能の設定について解説したいと思います。

バージョンは、Windows10 Home 1909、Ubuntu 20.04.1 LTS、Python 3.9.0、Django 3.1.2、VS Code 1.50.1です。

1.使用したディレクトリ構成

一般ユーザー(user_name)のホームディレクトリの中に、py1、py2という仮想環境用のディレクトリを作ります。この記事ではpy1の仮想環境(.venv1)を指定し、実行したいと思います。

仮想環境の作成は、py1で「python3 -m venv .venv1」、py2で「python3 -m venv .venv2」を実行します。

/home
 │
 └user_name   #一般ユーザー名
   │
   ├py1       #仮想環境実行用ディレクトリ-1
   │ └.venv1  #仮想環境設定ファイル(仮想環境名)
   └py2       #仮想環境実行用ディレクトリ-2
     └.venv2  #仮想環境設定ファイル(仮想環境名)

なお、仮想環境をいくつも作る場合には、以下のようにディレクトリ(venvs)の中に仮想環境を集めるとすっきりします。

/home
 │
 └user_name     #一般ユーザー名
   │
   └venvs       #仮想環境を集めたディレクトリ
     │
     ├py1       #仮想環境実行用ディレクトリ-1
     │ └.venv1  #仮想環境設定ファイル(仮想環境名)
     └py2       #仮想環境実行用ディレクトリ-2
       └.venv2  #仮想環境設定ファイル(仮想環境名)

2.Python Pathの設定

Python実行の最初の準備として、Pythonのパスを指定しましょう。Pythonのパスを指定することで、どこにインストールしたインタプリタを実行するのかを指定することができます。

(1) 設定画面の起動

まず、VS Codeの設定画面を開きます。以下、サーバーの「Py1」を開いた後の画面ですが、「左下の歯車」→「設定」より設定画面を起動します。

左上の「ファイル」→「ユーザー設定」→「設定」でも同じように起動できます。

01_設定の起動

(2) パスの指定

設定画面が起動したら空欄①に「python.pythonpath」と入力し、ワークスペースのタブ②をクリックします。ワークスペースを指定することで、現在開いているディレクトリ「PY1」で実行するPythonの環境を指定することができます。

他のタブ「ユーザー」「リモート」にも設定できますが、異なる記述をした場合には「ワークスペース」の記述が優先されます。最初のうちは「ワークスペース」でパスを直接指定し、使用する環境を明確にした方がよいと思います。

入力欄③にはディフォルトで「python」と入力されているので、これを「/home/user_name/py1/.venv1/bin/python3」と書き換えます。ホームディレクトリを表す「~」を使って「~/py1/.venv1/bin/python3」としてもかまいません。

なお、パスの入力では直接入力しなくても、左のエクスプローラーから、~/py1/.venv1/bin/python3を表示し、ファイル「python3」を右クリック→「パスのコピー」を選択すると、パスをペーストすることができます。

02_pythonpathの指定_05

入力欄③を変更すると、上図青枠のところに新しいディレクトリ「.vscode」とファイル「settings.json」が自動で作られます。

以下、ディレクトリ構成です。「py1」の下に「.vscode」が加わりました。

/home
 │
 └user_name    #一般ユーザー名
   │
   ├py1        #仮想環境実行用ディレクトリ-1
   │ ├.venv1   #仮想環境設定ファイル(仮想環境名)
   │ └.vscode  #VS Codeの設定ファイル用ディレクトリ
   │     └settings.json
  #Python Path, Venv Pathの設定
   └py2        #仮想環境実行用ディレクトリ-2
     └.venv2   #仮想環境設定ファイル(仮想環境名)

入力欄③に記述したワークスペースのパスの設定内容は、このsettings.jsonに記録されており、入力欄③とこのsettings.jsonは連動しています。設定を変更したい場合には、どちらを修正してもかまいません。

なお、ユーザーやリモートに記述した内容は、このsettings.jsonには記述されません。

(3) Python Path入力欄のディフォルト

左側のエクスプローラーに表示されたsettings.jsonをクリックすると中を表示できます。Python Path入力欄に「/home/user_name/py1/.venv1/bin/python3」を入力した状態では、settings.jsonの内容は以下の通りです。

{
    "python.pythonPath": "/home/user_name/py1/.venv1/bin/python3"
}

ここで、注意しなければならないのは、入力欄③の記述を空白にした場合、settings.jsonは以下のようになります。つまり、パスの設定が空白になります。

{
    "python.pythonPath": ""
}

Pythonのパスの状態をディフォルトにもどしたい場合には入力欄③に「python」と記述します。すると、settings.jsonのpythonPathの設定自体が消えます。

{
}

3.Venv Pathパスの設定

Venv Pathでは、どの仮想環境を実行するのかを指定します。実際に試してみるとPython Pathを指定しただけで仮想環境も選択されるようですが、環境が安定するようにVenv Pathの設定もしたいと思います。

(1) パスの指定

Python Pathの時と同様に、設定画面の入力欄①に「venv path」と入力し、「ワークスペース」タブ②をクリックします。そして、入力欄③に「/home/user_name/py1/.venv1」と入力します。

03_venvpathの設定_03

Venv Pathのワークスペースに入力した内容も、「~/.venv1/settings.json」に記録されます。

{
    "python.pythonPath": "/home/user_name/py1/.venv1/bin/python3",
    "python.venvPath": "/home/user_name/py1/.venv1"
}

ただし、「python.pythonPath」を「/home/user_name/py1/.venv1/bin/python3」とし、「python.venvPath」を「/home/user_name/py2/.venv2」とした場合でも、仮想環境はpy1の(.venv1)となるため、実は私の「python.venvPath」に対する考え方が間違っているかもしれません

4.hello.pyの作成とpylintのインストール

Pythonのモジュール(hello.py)を作り、仮想環境を変更する方法について説明します。

(1) モジュールの作成

Pythonのモジュール「hello.py」を作成します。左側のエクスプローラーの図の「①」のあたりを一度クリックします。これでディレクトリ「py1」が選択されます。

次に、新しいファイルを作成するボタン②をクリックします。

04_helloファイル作成

下図①にファイル名を記入する欄が現れるので、「hello.py」と入力してEnter。

右側にhello.pyのタブができるので、②に以下のコードを記入します。

print('hello! hello!')

しばらくすると、③の位置に「Python 3.9.0 64-bit('.venv1':venv)」と表示され、右下④の位置に、「Linter pylint is not installed」が表示されます。④については後述します。

05_helloファイル作成

(2) 仮想環境の変更

下図①の部分をクリックすると、ドロップダウンリストが表示され、Pythonの仮想環境を変更することができます。

ドロップダウンリストには自動で候補が表示されますが、下図の例では下図青枠②の候補は「./.venv1/bin/python」となっており、Penv Pathで指定した「python3」ではありません。そして、②で「./.venv1/bin/python」を選択してしまうと、現在の「./.venv1/bin/python3」は選択肢から消え、ドロップダウンリストから直接選択することができません。

そんな時には、緑枠③の「Enter interpreter path...」を選択し、「/home/user_name/py1/.venv1/bin/python3」を直接入力すると元に戻せます。

不本意にインタプリタが切り替わってしまったり、設定のPython PathやVenv Pathの記述の通りにならない場合には、直接入力をお勧めします。

06_インタプリタの選択_02

5.lint機能、自動整形

先ほど「Linter pylint is not installed」というWarningが表示されたので、lint機能と自動整形について簡単に説明します。

(1) pylintのインストール

モジュールhello.pyを作ったときに下図④が表示されましたが、pylintとはlinterと呼ばれるツールです。

05_helloファイル作成

Pythonではpep 8など推奨するコードスタイルが提案されています。lint機能は文法やコードスタイルをチェックしてくれる機能であり、いくつかのツールが存在します。

どれがよいか分からない時は、以下の2つをインストールし、まず、pylintから使用することをお勧めします。いずれも有名なlinterであり、pylintの方がチェックが厳しいです。

pylistは厳しすぎるという評価もあるので、気に入らない場合にはpylintのエラー表示を減らす設定をしたり、flake8に切り替えてください。

  • pylint #flake8よりも厳しい。
  • flake8

また、autopep8は、保存時や編集時にコードの自動整形を行ってくれるツールです。これも有名なパッケージですので、インストールする価値はあります。

  • autopep8 #コードの自動整形を行う

それでは、内容がわかったところで、先ほどの「Linter pylint not installed.」の「install」をクリックし、pylintをインストールしてください。

07pylintインストール

ターミナルからターミナルから以下のコマンドを実行してもインストール可能です。

$ sudo python3 -m pip install -U pylint

ただ、表示されたウィンドウからインストールした方が無難だと思います。

ひとまず、これでlint機能に関係するワーニングは出なくなりますが、以下、lint機能の設定の変更やflake8、autopep8のインストールについても説明します。

(2) 設定の変更

「左下の歯車」→「設定」により、以下の赤字の部分で設定を検索し、Lint関係の設定を変更することができます。青字はそれぞれの設定のディフォルト値です。

  • Lint機能の使用の有無
     → python.linting.enabledチェック有
  • Lint機能を使う場合、pylintの使用の有無
  •  → python.linting.pylintEnabledチェック有
  • Lint機能を使う場合、flake8の使用の有無
     → python.linting.flake8Enabledチェック無
  • ファイル保存時のLint機能の使用の有無
     → python.linting.lintOnSaveチェック有
  • コード自動整形機能で使用するツール
     → python.formatting.providerautopep8
  • ファイル保存時、コード自動整形機能の使用の有無
     → editor.formatOnSaveチェック無

(3) 設定ファイルの保存場所

Lint機能、自動整形機能の設定は、Python PathやVenv Pathと同じファイルsettings.jsonに保存されます。ディフォルトの設定と異なる設定になるときにファイルに記述されます。

「ユーザー」「リモート」「ワークスペース」の各設定ファイルは、コマンドパレット(F1)から、それぞれ以下のコマンドで開くことができます。赤色の部分だけで検索可能です。

  • ユーザー: preferences: open user settings
  • リモート: preferences: open remote settings
  • ワークスペース: preferences: open workspace settings (json)

また、設定ファイルの保存先の例は以下の通りです。なお、青字の部分は自分で設定したユーザー名やディレクトリ名です。ユーザーは自分のPC(クライアント)側のWindowsに、リモートとワークスペースはリモートサーバー側に保存されています。

  • ユーザー:C:\Users\windowsのユーザー名\AppData\Roaming\Code\User\settings.json
  • リモート:/home/user_name/.vscode-server/data/Machine/settings.json
  • ワークスペース:/home/user_name/py1/.vscode/settings.json

ついでに、sshの接続設定ファイル、ECDSA key fingerprintの設定ファイルの場所も紹介します。

  • 接続設定:remote-ssh: open configuration file → C:\Users\ユーザー名\.ssh\config
  • 「ECDSA key fingerprint」の設定:→ C:\Users\ユーザー名\.ssh\known_hosts

(4) flake8のインストール

flake8は、設定から検索しpython.linting.flake8Enabledにチェックを入れると、flake8のインストールを勧めるウィンドウが表示されます。

ターミナルから以下のコマンドを実行してもインストール可能です。

$ sudo python3 -m pip install -U flake8

(3) autopep8のインストール

例えばhello.pyのprint('hello! hello!')の行で右クリックし、「ドキュメントのフォーマット」を選択するとコードの自動整形機能を使う事ができます。なお、コードの自動整形機能のショートカットキーは「Shift+Alt+F」です。

しかし、autopep8がインストールされないまま自動整形機能を実行すると、autopep8のインストールを勧めるウィンドウが表示されます。

また、ターミナルから以下のコマンドを実行してもインストール可能です。

$ sudo python3 -m pip install -U autopep8

6.hello.pyの実行

Pythonのモジュールhello.pyを実行します。なお、実行にはいくつかの方法がありますので、順番に説明します。

(1) ターミナルでPythonファイルを実行

右上の緑色の三角印①を実行するとターミナルでPythonファイルを実行します。枠②の部分が、bushから3:Pythonに切り替わっていることに注意してください。

無事、③「hello! hello!」が出力されました。また、ターミナルの行の最初が④(.venv1)となっています。

なお、④と⑤の表示が違う場合は⑤の表示の仮想環境で実行されます。

08_三角印で実行_03

最初はターミナルを使って仮想環境に切り替えるのかと思っていましたが、そうではありません。

(2) デバッグなしで実行

デバッグなしで実行します。上の①「実行」より「デバッグなしの実行」で実行できます。ショートカットキーは「Ctrl+F5」です。

先ほどと違い、ターミナルでは「4:Python Debug Console」と表示されます。なお、③で表示される仮想環境で実行されます。

09_デバッグなしで実行_02

(3) デバッグの開始

デバッグの開始(F5)を実行します。①「実行」をクリックして「デバッグの実行」を選択する。あるいは「F5」で実行します。

すると、ドロップダウンリストが表示されるので「Python File Debug the currently active Python file」を選択します。この表示はデバッグのたびに表示されますが、表示しない方法もありますので後述します。

10_デバッグの開始前のドロップダウンリスト

実行すると、同様にターミナルにデバッグの内容と実行結果が出力されます。なお、ターミナルはデバッグなしで実行(Ctrl+F5)の時と同様に「4:Python Debug Console」です。

(4) ターミナルでコマンドによる実行

ターミナルに「python3 hello.py」と直接入力することによっても実行できます。ターミナルは「4: Python Debug Console」のままでも実行できますが、ターミナルの設定が「1: bash」の場合について実行結果を検証します。

検証の前にhello.pyのコードに「import numpy」を追加します。

import numpy
print('hello! hello!')

仮想環境(.venv1)にはnumpyをインストールしてありますが、仮想環境(.venv1)以外にはnumpyがインストールされていません。したがって、どの環境で実行されているのか判定できます。

以下の例では、下の青いバーには仮想環境の表示がありますが、ターミナルの行頭には(.venv1)の表示がありません。この状態でターミナルで「python3 hello.py」を実行すると、エラーになります。

つまり、ターミナルにコマンドを入力して実行したときには、下の青いバーの表示は関係ないことが分かります。

11_numpyでエラー

念のため、今度はターミナルで「. .venb1/bin/activate」を実行し、で仮想環境に移行します。そして、先ほどと同じように「python3 hello.py」を実行しました。すると、今度は無事「hello! hello!」を出力できました。

12_numpyでエラーなし_02

このように、ターミナル内のコマンドによるPythonの実行は、VC CodeのPython PathやVenv Pathの設定とは関係ありません。

下の青いバーの表示には関係なく、ターミナル自体がどの仮想環境に入っているのかによって実行される環境が決まります。

7.ディバッグ時のドロップダウンリストを消す

ディバックの実行(F5)のたびに、以下のようなドロップダウンリストが表示されますが、表示されないように設定します。

10_デバッグの開始前のドロップダウンリスト

まず、「実行」をクリックし、「構成を開く」を選択します。

13_構成を開く

デバッグの設定の選択を求められるので、「Python File Debag the currently active Python file」を選択します。

14_ディバッグツールの選択

すると、「.vscode」の中、つまり、settings.jsonと同じ位置に「launch.json」が作られます。

15_launchファイルの追加_02

これで、デバッグの実行時にもドロップダウンリストは表示されなくなります。launch.jsonにどのディバッグを使うか記述されるからです。

以下、launch.jsonの記述例です。「構成を開く」の実行により自動で作成されます。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

8.最終的なディレクトリ構成

以上で、基本的なPythonの実行環境ができあがりました。「.vscode」の部分が追加され以下の様なディレクトリ構成になります。

/home
 │
 └user_name    #一般ユーザー名
   │
   ├py1        #仮想環境実行用ディレクトリ-1
   │ ├.venv1   #仮想環境設定ファイル(仮想環境名)
   │ ├.vscode  #VS Codeの設定ファイル用ディレクトリ
   │ │   ├settings.json
   │ │   └launch.json
   │ └hellow.py 
   └py2        #仮想環境実行用ディレクトリ-2
     └.venv2   #仮想環境設定ファイル(仮想環境名)

これで、ようやくピコピコ訳のわからない表示が出ることがなくなり、落ち着いてPythonを実行できます。

私が実際にレンタルしたVPSサーバー

私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示したりすることもできます。

なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。

また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。

また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)



その他

Twitterへのリンクです。SNSもはじめました♪

以下、私が光回線を導入した時の記事一覧です。
 (1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
 (2) NURO光の開通までWiFiルーターを格安レンタルできる
 (3) NURO光の屋外工事の状況をご紹介。その日に開通!
 (4) 光回線開通!実測するとNURO光はやっぱり速かった
 (5) ネット上のNURO光紹介特典は個人情報がもれないの?