hack のためのネタ帳, etc,,,

未解決問題

状況

Visual Studio Code が update して みたいな話が流れてたので、vscode で .ipynb を開いてみたんだが、
インテリセンスやら、バルーンヘルプやら出るのでこれはかなり良さそう。

しかし、Python について
  • python 2.7.16 64bit C:\cygwin64\bin\python2.7.exe
  • python 3.7.6 64-bit ~\AppData\Local\Microsoft\WindowsApps\python.exe
は検出してくれるんだが、
  • python 3.6.9 64bit C:\cygwin64\bin\python3.6m.exe
を検出してくれない。

Microsoft Store 版 python は以下の奴を以前入れるだけ入れて放置してて全然使ってない状態だった物。
仕方ないので、これでやってみるかと思い試してみたのだが、いろいろと面倒だった上、頓挫した。

まず、いきなり脇道に逸れるが、Microsoft Store 版の python は %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\python.exe にあるんだけど、なぜかこのフォルダにあるバイナリは以下のように片っ端から 0 byte になっている。
PS C:\Users\kou\AppData\Local\Microsoft\WindowsApps> ls *.exe


    ディレクトリ: C:\Users\kou\AppData\Local\Microsoft\WindowsApps


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---l       2019/12/13      6:25              0 GameBarElevatedFT_Alias.exe
-a---l       2019/12/24     21:02              0 idle.exe
-a---l       2019/12/24     21:02              0 idle3.7.exe
-a---l       2019/12/24     21:02              0 idle3.exe
-a---l       2019/11/15     18:24              0 MicrosoftEdge.exe
-----l       2017/11/30     15:26              0 openSUSE-42.exe
-a---l       2019/12/24     21:02              0 pip.exe
-a---l       2019/12/24     21:02              0 pip3.7.exe
-a---l       2019/12/24     21:02              0 pip3.exe
-a---l       2019/12/24     21:02              0 python.exe
-a---l       2019/12/24     21:02              0 python3.7.exe
-a---l       2019/12/24     21:02              0 python3.exe
-a---l       2019/12/24     21:02              0 pythonw.exe
-a---l       2019/12/24     21:02              0 pythonw3.7.exe
-a---l       2019/12/24     21:02              0 pythonw3.exe
-----l       2019/05/28     10:54              0 ubuntu.exe
C:\Users\kou\AppData\Local\Microsoft\WindowsApps>dir *.exe
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6E6F-F4F7 です

 C:\Users\kou\AppData\Local\Microsoft\WindowsApps のディレクトリ

2019/12/13  06:25                 0 GameBarElevatedFT_Alias.exe
2019/12/24  21:02                 0 idle.exe
2019/12/24  21:02                 0 idle3.7.exe
2019/12/24  21:02                 0 idle3.exe
2019/11/15  18:24                 0 MicrosoftEdge.exe
2017/11/30  15:26                 0 openSUSE-42.exe
2019/12/24  21:02                 0 pip.exe
2019/12/24  21:02                 0 pip3.7.exe
2019/12/24  21:02                 0 pip3.exe
2019/12/24  21:02                 0 python.exe
2019/12/24  21:02                 0 python3.7.exe
2019/12/24  21:02                 0 python3.exe
2019/12/24  21:02                 0 pythonw.exe
2019/12/24  21:02                 0 pythonw3.7.exe
2019/12/24  21:02                 0 pythonw3.exe
2019/05/28  10:54                 0 ubuntu.exe
              16 個のファイル                   0 バイト
               0 個のディレクトリ  2,372,785,106,944 バイトの空き領域
地味に面食らうのだが、
<SYMLINK> や <JUNCTION> の表示が出ないので、シンボリック・リンクやジャンクションでもない気が。
いや、でもよく見ると PowerShell では mode の末尾に l って入ってるからやはり何らかのリンクっぽい。
こいつの正体は一体何???
これは一体どうやって作って、どうやって本体のバイナリに紐付いているのだろう???

まぁ、単なる疑問であって問題ではないので、これはお置いておこう。

閑話休題

とりあえず、PATH にはこのフォルダが自動的に追加されているので、このフォルダにある .exe は呼ぶことは出来る。
以下のようにして pip で jupyter を入れた。
pip install jupyter

> pip install jupyter


ところが、jupyter コマンドが呼べない。
>jupyter
'jupyter' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
pip の出力をよく見てみると、
  WARNING: The scripts jupyter-migrate.exe, jupyter-troubleshoot.exe and jupyter.exe are installed in 'C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
みたいなことを言われていた。
そこで「システムのプロパティ」の「詳細設定」タブにある「環境変数」を開いて、ユーザーの環境変数の Path に以下の値を追加した。
  • %USERPROFILE%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts

なお、上記の「環境変数」のエディタは、Windows キーを押して「kannkyou」とか入力すれば、「環境変数の編集 コントロールパネル」って項目が表示れる。こちらから開く方が早いだろう。

以上で、CMD や PowerShell から
jupyter notebook
とすることで jupyter notebook が開くようになった。

ところが、ブラウザには、
  • file:///C:/Users/kou/AppData/Roaming/jupyter/runtime/nbserver-4252-open.html
みたいなアドレスが表示されて、開けない。
と言うか、そもそも %USERPROFILE%\Appdate\Roming 以下に jupyter ってフォルダが存在しない。
このファイルはどこにあるかと言うと、
  • %USERPROFILE%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\Roaming\jupyter\runtime
にあって、これはどうやって解決すればいいのか調べがつかなかった。

とりあえず、
    To access the notebook, open this file in a browser:
        file:///C:/Users/kou/AppData/Roaming/jupyter/runtime/nbserver-4252-open.html
    Or copy and paste one of these URLs:
        http://localhost:8889/?token=790a1aaa74f10878d6335d09910c4cacd60a05c37915bb5a
     or http://127.0.0.1:8889/?token=790a1aaa74f10878d6335d09910c4cacd60a05c37915bb5a
のようには表示されるので、localhost の URL を開けば問題はないが、ちょっと面倒だ。

で、CMD や PowerShell についてはそれで問題はないのだが、問題なのは vscode
この状態で、vscode に .ipynb を食わせて、実行ボタンを押すと実行しようと試みているのだが、
新たに jupyter notebook のサーバーを起動した上で
  • %USERPROFILE%\AppData\Roaming\jupyter
を読みに行っているらしく、
Error: Kernel not created with the name python37664bita57723ca72064502b66e7a53a7be66cf, display_name Python 3.7.6 64-bit. Output is Installed kernelspec python37664bita57723ca72064502b66e7a53a7be66cf in C:\Users\kou\AppData\Roaming\jupyter\kernels\python37664bita57723ca72064502b66e7a53a7be66cf
のようにエラーとなってしまう。

これ、そもそも %USERPROFILE%\AppData\Roaming\jupyter 読みに行ってるというのは、システムフォルダにインストールした奴しか想定してないという事かな?

解決方法としては、vscode 側を
  • %USERPROFILE%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\Roaming\jupyter\kernel
を直接見に行かせるよう変更するか、
  • %USERPROFILE%\AppData\Roaming\jupyter
  • %USERPROFILE%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\Roaming\jupyter
をジャンクションかシンボリック・リンクでぶら下げるかではないかと。

Roaming は unionfs みたいにシステムフォルダに被せて使うフォルダだった気がするので後者だと別の問題が発生しそうな気はしたのだが、
前者はコード読むのが面倒な気がし、悩んでても解決しないので、とりあえず後者を試してみた。

まず、管理者権限で CMD を開いて、以下のようにしてシンボリック・リンクを作成。
CD %USERPROFILE%\AppData\Roaming
mklink /D jupyter %USERPROFILE%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\Roaming\jupyter

とりあえず、これで kernel は動いた。
ここまでは、問題はありながらも割と順調に解決出来ていたのだが、ここで完全に頓挫した。

今度は DLL が見つからないらしく以下のようなエラーに。
[I 23:12:21.274 NotebookApp] The port 8888 is already in use, trying another port.
[I 23:12:21.287 NotebookApp] Serving notebooks from local directory: C:\Users\kou\AppData\Local\Temp\a30d6928-c3cf-40d6-9994-86e12981f005
[I 23:12:21.287 NotebookApp] The Jupyter Notebook is running at:
[I 23:12:21.287 NotebookApp] http://localhost:8889/?token=c6168802f335dbb582010c55e5b87d1967ab71844c6b9c03
[I 23:12:21.287 NotebookApp]  or http://127.0.0.1:8889/?token=c6168802f335dbb582010c55e5b87d1967ab71844c6b9c03
[I 23:12:21.287 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:12:21.292 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///C:/Users/kou/AppData/Roaming/jupyter/runtime/nbserver-17312-open.html
    Or copy and paste one of these URLs:
        http://localhost:8889/?token=c6168802f335dbb582010c55e5b87d1967ab71844c6b9c03
     or http://127.0.0.1:8889/?token=c6168802f335dbb582010c55e5b87d1967ab71844c6b9c03
[I 23:12:22.467 NotebookApp] Creating new notebook in /
[E 23:12:22.529 NotebookApp] Uncaught exception POST /api/sessions?1578665542495 (127.0.0.1)
    HTTPServerRequest(protocol='http', host='localhost:8889', method='POST', uri='/api/sessions?1578665542495', version='HTTP/1.1', remote_ip='127.0.0.1')
    Traceback (most recent call last):
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\web.py", line 1699, in _execute
        result = await result
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 742, in run
        yielded = self.gen.throw(*exc_info)  # type: ignore
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\notebook\services\sessions\handlers.py", line 72, in post
        type=mtype))
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 735, in run
        value = future.result()
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 742, in run
        yielded = self.gen.throw(*exc_info)  # type: ignore
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\notebook\services\sessions\sessionmanager.py", line 88, in create_session
        kernel_id = yield self.start_kernel_for_session(session_id, path, name, type, kernel_name)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 735, in run
        value = future.result()
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 742, in run
        yielded = self.gen.throw(*exc_info)  # type: ignore
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\notebook\services\sessions\sessionmanager.py", line 101, in start_kernel_for_session
        self.kernel_manager.start_kernel(path=kernel_path, kernel_name=kernel_name)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 735, in run
        value = future.result()
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tornado\gen.py", line 209, in wrapper
        yielded = next(result)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\notebook\services\kernels\kernelmanager.py", line 168, in start_kernel
        super(MappingKernelManager, self).start_kernel(**kwargs)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_client\multikernelmanager.py", line 110, in start_kernel
        km.start_kernel(**kwargs)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_client\manager.py", line 240, in start_kernel
        self.write_connection_file()
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_client\connect.py", line 476, in write_connection_file
        kernel_name=self.kernel_name
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_client\connect.py", line 141, in write_connection_file
        with secure_write(fname) as f:
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\lib\contextlib.py", line 112, in __enter__
        return next(self.gen)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_core\paths.py", line 424, in secure_write
        win32_restrict_file_to_user(fname)
      File "C:\Users\kou\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\jupyter_core\paths.py", line 359, in win32_restrict_file_to_user
        import win32api
    ImportError: DLL load failed: 指定されたモジュールが見つかりません。
[W 23:12:22.535 NotebookApp] Unhandled error
[E 23:12:22.535 NotebookApp] {
      "Content-Type": "application/json",
      "Authorization": "token c6168802f335dbb582010c55e5b87d1967ab71844c6b9c03",
      "Accept": "*/*",
      "Content-Length": "148",
      "User-Agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)",
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Host": "localhost:8889"
    }
[E 23:12:22.535 NotebookApp] 500 POST /api/sessions?1578665542495 (127.0.0.1) 33.18ms referer=None

とりあえず、Microsoft Store 版 python を対話モードで開いて、以下のように試してみたのだが、そもそもの話 win32api ってモジュールが見当たらないようだ。
>>> import win32api
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
まさかとは思うが Microsoft Store 版なので UWP アプリなため win32api が使えないとかいう話ではないと思うのだが、これはどうしたら良いのか?

とりあえず、pip も試してみたが以下のように駄目だった。
> pip install win32api
Collecting win32api
  ERROR: Could not find a version that satisfies the requirement win32api (from versions: none)
ERROR: No matching distribution found for win32api
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

CMD や PowerShell から立ち上げた jupyter notebook でも同様のエラーになるし、
Microsoft Store 版 python だとここで手詰まりだろうか?
win32api が import 出来ない問題は関連にまとめたが、これも順調に頓挫中。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます