もし、ImportError:DLL load failed になったら

もし、あなたが買ったばかりや再インストールしなおしたばかりのWindowsで、PythonでQtライブラリを使おうとしたときに

from PyQt6.QtWidgets import ( ImportError: DLL load failed while importing QtCore

といったエラーが出たら、Visual C++ Redistributable をインストールしてみてください -> 👉 Visual C++ Redistributable for Visual Studio 2015–2022

    私は「SDIMV」というAIで生成した画像に埋め込まれているPromptを表示させるツールを実行させようとしてこのエラーに悩まされました。配布されている、.exe版でエラーが出る場合も、この方法で解消できます。

    mutagenでMP3のヘッダデータ中のコメントを編集して保存する

    chosic.comというサイトでフリーの音源を漁るのが好きです。soundcloudなどで活動する人が投稿してくれて自分好みの曲が多いのでよく使っています。。

    ダウンロードした楽曲がどういう条件で使えるのかわかるようにしておくために、再生ソフトでmp3ファイルのヘッダデータ中のコメントデータをちまちまと編集してメモするのですが、これをPython使ってもう少しシンプルな作業にしたいと思いました。

    MP3ヘッダを扱えるmutagenというライブラリがあるのですが、メディアファイル全般を扱える結構汎用的なライブラリでちょっと複雑だったのでメモしときます。

    コメントの読み出し: id3クラスを使います。ディクショナリ形式でアクセスができます。ここまでは結構いろんなサイトでも解説されていると思います。

    from mutagen import id3
    
    #...中略....
    
    try:
        audio = id3.ID3(args.mp3file) #args.mp3fileにはファイル名を入れてね。
    except id3._util.ID3NoHeaderError:
        print(f"{args.mp3file}にはヘッダがありません。")
        exit()
    
    printf(audio["COMM::eng"][0])

    コメントの書き出しと保存:string型のデータを直接”COMM:eng”に渡すのではなく、id3クラスのCOMMメソッドを使ってコメントデータを生成して渡します。ここで、langという引数を設定するのと、コメントテキストは配列で与えること。ここがなかなか調べても出てこなかった。最後はsaveメソッドです。

    from mutagen import id3
    
    #...中略...
    
    try:
        audio = id3.ID3(args.mp3file)
    except id3._util.ID3NoHeaderError:
        print(f"{args.mp3file}にはヘッダがありません。作成します。")
        audio = id3.ID3()
    
    comment = "この楽曲はアメリカ中西部の原住民のスタイルを踏襲しています。"
    
    if "COMM::eng" in audio:
         audio['COMM::eng'] = id3.COMM(encoding=3, lang='eng',text=[comment])
    audio.save(args.mp3file)
    print(f"書き込まれたデータは:\n{audio['COMM::eng'][0]}")

    ディクショナリ形式でCOMM::engを登録先に指定してもCOMM::engに登録されない(”COMM:XXX”というキーに登録されてしまう。)というところが謎だったのですが、id3.COMMメソッドでlang=として3文字の言語コードを指定することで記入ができるというのがポイントです。日本語のデータでも’eng’でよいと思います。多くのプレーヤソフトはlang=”eng”のデータを参照しているように見えます。

    なお、この手順でコメントを保存すると。 ID3v2v2.4のタグとして挿入されます。おおよそ問題はないと思いますが古いプレーヤを使っている人は注意。

    Remote-SSH プラグイン実行時にcould not to establish connection to エラー

    Remote-SSH: Connect Host 実行時に失敗する

    Visual Studio Codeの Remote-SSH プラグイン使用時に、could not to establish connection to “xxx”というダイアログが出て接続でないトラブルに見舞われた。

    ログのウインドウを見ると、下記の通り、Windows 10(Windows 10 1903)の標準OpenSSHクライアントを使っていて、その際にsshのconfigファイルに”permissions”がないと言われて、止まっている。

    [12:17:43.264] SSH Resolver called for "ssh-remote+xxx.xxx.xxx.jp", attempt 1
    [12:17:43.264] SSH Resolver called for host: xxx.xxx.xxx.jp
    [12:17:43.264] Setting up SSH remote "xxx.xxx.xxx.jp"
    [12:17:43.288] Using commit id "26076a4de974ead31f97692a0d32f90d735645c0" and quality "stable" for server
    [12:17:43.290] Testing ssh with ssh -V
    [12:17:43.340] ssh exited with code: 0
    [12:17:43.340] Got stderr from ssh: OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
    [12:17:43.342] Running script with connection command: ssh -T -D 50829 xxx.xxx.xxx.jp bash
    [12:17:43.344] Install and start server if needed
    [12:17:43.346] Terminal shell path: C:\WINDOWS\System32\cmd.exe
    > ;C:\WINDOWS\System32\cmd.exe
    
    [12:17:43.430] Got some output, clearing connection timeout
    [12:17:43.438] >
    [12:17:43.460] > Bad owner or permissions on C:\\Users\\XXXXXXXXX/.ssh/config
    >>>
    [12:17:43.469] > プロセスが、存在しないパイプに書き込もうとしました。
    >
    [12:17:43.905] "install" terminal command done
    [12:17:43.906] Install terminal quit with output: プロセスが、存在しないパイプに書き込もうとしました。
    [12:17:43.906] Received install output: プロセスが、存在しないパイプに書き込もうとしました。
    [12:17:43.906] Stopped parsing output early. Remaining text: プロセスが、存在しないパイプに書き込もうとしました。
    [12:17:43.906] Failed to parse remote port from server output
    [12:17:43.906] Resolver error:
    

    解法

    こちらの中盤に書いてあるように
    sshのconfigファイルのパーミションを修正するツールを導入、パーミション変更をする。

    管理者モードでPowershellを立ち上げて、下記を順に実行する。

    > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
    
    > Install-Module -Force OpenSSHUtils -Scope AllUsers
    
    > Repair-UserSshConfigPermission ~/.ssh/config
    > Get-ChildItem ~\.ssh\* -Include "id_rsa","id_dsa" -ErrorAction SilentlyContinue | % {
    Repair-UserKeyPermission -FilePath $_.FullName @psBoundParameters
    }
    

    しかし、ここも以下のようなエラーが出て、うまく行かないことがある。

    PackageManagement\Install-Package : ファイル 'OpenSSHUtils.psd1' の Authenticode 署名が無効なため、モジュール 'OpenSSHUtils' をイン
    ストールまたは更新できません。
    発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 文字:21
    + ... $null = PackageManagement\Install-Package @PSBoundParameters
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package]、Exception
    + FullyQualifiedErrorId :
    InvalidAuthenticodeSignature,ValidateAndGet-AuthenticodeSignature,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
    

    上記の場合、証明書のチェックを外すために、2行目のInstall-Module で-SkipPublisherCheckオプションを指定して再実行。

    Install-Module -Force OpenSSHUtils -Scope AllUsers -Verbose -SkipPublisherCheck
    

    ここまでうまく行ったら、再度、Repair-UserSsshConfigPermission の部分からやり直すと良い。

    Visual Studio CodeでAnaconda環境を使う

    Visual Studio CodeでAnacondaの環境を指定する

    Anacondaで作成したPythonの仮想環境を指定してViusual Studio Code上でスクリプトを実行する手順を書く。Microsoft製のPython エクステンションを使うので、まずはそれをインストールする。
    基本的な手順は、マイクロソフトのページのここを参照する。

    また、作るスクリプトごとに使う環境は違うだろうから、File->Open Workplaceにて、ワークプレースを開いた状態にする。そうすると、次にワークプレース開くときも設定が有効になる。

    やり方

    1. コマンドパレット(Ctrl+Shift+P)を呼び出す
    2. Python:Select Interpreter コマンドを呼び出す
    3. 呼び出した環境で、ホームディレクトリ(WindowsならC:\Users\ユーザーネーム )のAnaconda3ディレクトリの下にある、作った環境名と同じフォルダを指定する。
    4. 以後、Ctrl+@などでターミナルを開くと、自動的にcondaが呼ばれて指定した環境になる。