変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

Visual Studio Code

[VScode]リモートサーバに繋ぐ※メモ書き

VScodeでHTMLやJavaScripの作成やデバッグができるけど、リモートなサーバにはWinSCP等でコピっていたけど今はSSH接続でターミナルやファイル転送やデバッグができる。

1.SSH接続の設定を追加する

まず、左のリモートエクスプローラ(><っぽい奴)からSSHの歯車をクリック。

一番上のconfigを選択

そして適当に追記

Host {SSH接続先メニューのタイトル}
    HostName {リモートホストのIPアドレス}
    User {SSH接続時のユーザ名}
    Port 22  ※多分22でOK
    IdentityFile ~/.ssh/{秘密鍵ファイル名のハズ}

Host のタイトルを {ユーザ名}@{表示名} のように書いたら、

プロセスが、存在しないパイプに書き込もうとしました。

とかエラーになった。

{表示名}_{ユーザ名}はOKなので@だけ失敗するかもしれない。

タダの表示名では無い様だ。

Ctrl+Sで保存

2.SSH鍵ファイルの作成と転送

昔はPuTTYをインストしてKEY-GENで作って出来たものを変換して・・・だったけど、

今はWindowsのコマンドプロンプトで作成できる。

※元ネタ:SSH鍵の生成と使用ガイド(Windows対応)

> dir "%USERPROFILE%\.ssh"         ※ SSH鍵を保存する .ssh フォルダがあるか調べる
> mkdir "%USERPROFILE%\.ssh" ※ .sshフォルダが無かったら実行する
> ssh-keygen -t rsa -b 4096 -f "%USERPROFILE%\.ssh\id_rsa" -N ""    ※このコマンドで作ってくれる

出来た公開鍵を使って下のスクリプト7行を{…}内を修正した内容をコピって

PowerShellにペーストしてリモートのホストの認証リストに追記させる。

※元ネタ:Windowsでssh-copy-idっぽいことをしたい

※改行を無視させる文末の「`」の前に半角空白が必須

$sshUser = '{SSH接続ユーザ名}'
$sshHost = '{リモートホストのIPアドレス}'
cat ~/.ssh/id_rsa.pub | ssh ${sshUser}@${sshHost} `
" `
mkdir -p ~/.ssh && chmod 700 ~/.ssh && `
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys `
"

※ログインするのでパスワード入力応答あり、

これでリモートホストのフォルダを見る度にパスワード入力しなくてもいい。

リモートホストを選択し

なぜかリモートホストのプラットフォームをちゃんと選択すると

自動的に選択したプラットフォーム用のVSCode-Serverがリモートホストにインストされる

それはいいけど英語のメッセージ

和訳すればホッとする内容

これで毎回パスワード入力画面(下図)を見たくて良くなったのはとても気分がいい。

接続するとターミナルか

エクスプローラからソースを選択すれば編集できて保存もやってくれる。

デバッグもソースを手前に表示している状態でメニューの【実行】から

Node.jsを選択すれば、デバッグコンソールで

$  node  {表示してるJSファイル}

してデバッガが起動するのはいつも通り。

ブレークポイントとかウォッチ式も使える。※ import.meta.url 等一部不可

但しVSCodeで開いたフォルダがプロジェクト以外のディレクトリィだとそのディレクトリィをカレントディレクトリィとしてnodeを実行するみたいなので

privateKey: fs.readFileSync(`${__dirname}.ssh/id_rsa`), ※__dirname がホームディレクトリィ
↓
privateKey: fs.readFileSync(new URL(`.ssh/id_rsa`, import.meta.url)), ※ソースのフルパスを使う

とかちょっと修正が必要。



[Visual Studio Code]インスト

Visual Studio Codeとは

https://techacademy.jp/magazine/39548

を参考にVisual Studio Codeからダウンロードして、インスト。

画面が英語ばかりなので、以下の拡張機能を追加。

  • Japanese Language Pack for Visual Studio Code
  • Material Theme
  • Live Server
  • Markdown All in One

ps.2024/2/1

バージョン: 1.86.0 (user setup)
コミット: 05047486b6df5eb8d44b2ecd70ea3bdf775fd937
日付: 2024-01-31T10:28:19.990Z
Electron: 27.2.3
Chromium: 26495564
Node.js: 118.0.5993.159
V8: 18.17.1
OS: 11.8.172.18-electron.0
Sandboxed: Windows_NT x64 10.0.22631
インストしたVisual Studio Codeのバージョン

今は最初から日本語になっている。



[VSCode]Python, pytest

Visual Studio Code で Pythonのソースを実行する手順

1.VisualStudioCodeをインストールする。

https://azure.microsoft.com/ja-jp/products/visual-studio-code/ から
ダウンロードして、インスト。

日本語化する。

メニューのView Command Paletteを選択
[Configure Display Language]と入力
プルダウンリストから[Install additional Language…]を選択
画面左のEXTENSIONS: MARKETPLACEから
[Japanese Language Pack for VS Code]を選択
画面右の[Japanese Language Pack for VS Code]の説明下の【install】を押す
画面左下の【Restart Now】を押す
多々変なトコロもあるけど、タダだから仕方が無い

2.適当な場所にフォルダを作り、Pythonのソースを入れておく。

参考:https://scrapbox.io/remi-tech/VisualStudioCode%E3%81%A7pytest%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B

E:\pythonProject
 │- sample.py
 │- pytest.ini
 └─tests
      └─ test_sample.py
def func1(para) :
    print("func1")
    return "func1_" + para

def func2(para) :
    print("func2")
    return "func2_" + para
# pytest用

import os
import sys
sys.path.append(os.getcwd())
import sample

class Test_sample :
    def test_sample_func1(self) :
        assert sample.func1("aaa") == "func1_aaa"
        
    def test_sample_func2(self) :
        assert sample.func2("aaa") == "func2_aaa"
       
[pytest]
testpaths = ./tests
python_files = test_*.py
python_classes = Test
python_functions = test_

3.ワークスペースに上記のフォルダを追加する。

メニューの【フォルダーの追加】を押す
追加するフォルダを開いたら【追加】を押す
無事に目的のフォルダが追加された
壊さないうちにワークスペースとして保存してしまおう
勿論ワークスペース設定ファイルは先のフォルダの中に作る
とりあえずOK

3.Pythonの環境作り

・Windows StoreからPython3.8をインスト。
※本来Python3.xのインストールはOSやCPUの特性を詳細に調査しgccのConfigure(中身はPython2のソース)を熟読してオプションを探り出してビルドの後のTestモードの結果を見て何度もウンザリするものだが、Windowsはその辺の選択肢が一つしかないから世界中の誰かが成功すればもうその人の設定をコピペするだけでOK(逆算的に容易)であり、今ではベンダーのHPにもインストーラが用意されている。

ところが、
> python
指定されたプログラムは実行できません。
となる、これはPATH環境変数にプログラムのパスが通っていないせい。

コントロールパネル⇒システムとセキュリティ⇒システム
システムの詳細設定の【環境変数(N)…】を押す
システム環境変数(S)のPathを選択し【編集(I)…】を押す
設定内容の最後にコマンドラインで
> where python
の結果
C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps\python.exe
のファイル名のフルパスのフォルダ名を入れる
※ C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps

・VSCodeのエクスプローラのpythonのソースをクリックしてみると、

【Install】を押す
少し待つと、自動的にpython(の何か)がインストールされる

その↓の説明通りデバッグビューを経由して設定を進める

※スクショ上書きして消えたけど、確か「Python」 を選択したハズ。

設定が終わったら、緑の▷を押すと実行する。

4.pytestを設定する

インスト中、3.8だとアップグレード要求が出る

> python -m pip install –upgrade pip するとpipがアップグレードされる

ここまで進むとテストビューが出てくる。
出なければpythonソースを右クリックして「全ての単体テストを実行」を選択

Discover Testを押してテストソースを探させよう!

ここで、発見できない場合は、画面の左下の「出力」に原因が出る。
大体はテストソースの何かのエラーだ。

os.cwd()は間違い os.getcwd()が正解
実行してみよう!
うまくいった!!!

あ、vscodeやpipのリポジトリィも一旦消しといた方がいいね。

vscodeの場合は、C:\Users\ユーザ名\.vscode フォルダを消す。

pipの場合は、C:\Users\slani\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.*_************
※ * 部分はインストするマイナーバージョンやランダム文字

ps.

{
	"folders": [
		{
			"path": "."
		}
	],
	"settings": {}
}
{
    // 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"
        }
    ]
}
{
    "python.pythonPath": "C:\\Users\\{ユーザ名}\\AppData\\Local\\Microsoft\\WindowsApps\\python3.8.exe",
    "python.testing.pytestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true
}

では、なぜこんな記事を書いたのかと云うと・・・今朝方、仕事場の開発環境がぶっ飛んだから、予算の都合で非力なマシンになってしまったので試行錯誤するとむやみに時間だけが過ぎ去っていくので家に戻って準備した。
これを見れば、あの非力なマシンでも1時間もあれば余裕のハズ。(涙

ps.
VScodeではソースを修正すると改行コードがCR・LFとLFが混在することがある。この場合、見た目は問題無いソースだけどCRのせいで行が繋がって見えるらしく、イミフなインデントエラーが出ることがある。

def func1() CRLF
    """CRLF
    コメントLF
    """LF
※コメントは宣言されていない変数です。等


エディタ右下がCRLF表示になっている時は特に危ない。

{
// エディター設定
"editor.tabSize": 4,
"editor.insertSpaces": true, // Tabキーで半角空白
// ファイル設定
"files.autoSave": "off", //VScodeを閉じている間に他のエディタでソースを開くと変なことになりやすいのでOFF
"files.eol": "\n",  // 改行コードをLFにする
}

と強制的にLFしたりTABも空白になる様に仕向けないといけないようだ。

多分、改行コードのせいなのだろう。沢山のpytestのテスト関数を全部実行したらいくつかNGになった。しかし、1つづつ実行するとOK。
こんな時は大方は初期化処理が他のテスト関数と競合していたり依存しているためだ。
そのため、
def Test_xxxxx を def __Test_xxxxx と変えてpytestをやり過ごし、少しづつ戻していって、馬鹿な間違いをしているコードをあぶりだそうとした。

しかし、その結果。全て戻したら、ALL GREENになってしまった。
エディタが何かやらかしたらしい。もし幅0空白とか見えない文字だったら勘弁だ。

結果オーライでいいんだけど、再現したら泣きそうだ。

ここまで気を使わないといけないCompute言語なら・・・
Pythonなんて無くなってしまえ!
と素直に思う。

マネーをケチれば、 等価交換に則り、時間が足りなくなるのは必然である。

Slanirish Warlander




top