@tmngis

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VS Codeとjupyter notebookの相対パスの差異について

Q&A

Closed

表記の件、VS codeとJupyterで相対パスを使ってディレクトリ指定した場合の振る舞いの差異について教えていただきたく思います。
以下のコードでカレントディレクトリを取得する場合に出力結果が変わってしまい、原因がわからず困っております。


import os
a=os.getcwd()
print(a)


VS Codeではファイルのタブから開いたディレクトリとなっていますが、Jupyterで動作させた場合はその階下のpyファイル保存先が出力されました。

動作環境は以下の通りです。
python3.8.4
Windows10

ディレクトリ指定のプログラムを走らせる際、双方同じ結果を出力させるためには絶対パスで処理する必要があるのでしょうか?


追記します(2020/9/7)
下記画像にて現状の出力結果を記載します。
VS CodeとJupyterの出力結果を合わせられればと考えています。
※ 「Shift + Enter」でJupyterを動かしているので、ipynbファイルは保存していないです。
image.png

0 likes

2Answer

VS Code で開いた Jupyter Notebook の初期カレントディレクトリは、 VS Code の設定の Python > Data Science: Notebook File Root で変更できます。

初期値は Notebook のあるディレクトリを指す ${fileDirname} になっていると思いますが、 VS Code の開いているディレクトリを指す ${workspaceFolder} に変更すれば期待した結果になると思います。

参考:

6Like

Comments

  1. @tmngis

    Questioner

    ご回答ありがとうございます。
    設定変更でJupyter側のカレントディレクトリを合わせることができました!

該当のプログラムでは、プログラムを実行している場所が出力されます、
Jupyterの場合はおそらくipynbファイルの保存されている場所が出力されていると思います。
絶対パスで指定すれば実行場所に依らないので可能ならそのほうが良いと思います。

1Like

Comments

  1. @tmngis

    Questioner

    ご回答ありがとうございます。
    同じ場所で実行していると思っていたのですが、そうではなかったのですね。

    VS Code上でJupyterで動かした場合の初期ディレクトリを指定する方法はあるのでしょうか?
    もし不都合が出ないようであれば、同じ相対パスで動くようにしておきたいと考えています。
    Anaconda Prompt上で修正する記事は見つかったのですが、VS CodeでJupyterを動かす場合の方法については見つからなかったものでご教授いただけると幸甚です。。

    上記難しいようであればあきらめて絶対パスで処理しようと思います。
  2. pyファイルとipynbファイルを同じフォルダに保存すればその様になると思いますが、ダメでしょうか?
  3. @tmngis

    Questioner

    コメントありがとうございます。
    質問欄に追記しました。
    「Shift + Enter」でJupyterを動かしているので、ipynbファイルは作成していないです。
    初心者なものでフォルダ構成のルールやJupyterの使い方等について疎いのですが、あまりこのような使い方はしないのでしょうか?
  4. 状況を再現できました。
    この場合であれば、ターミナルにて`cd 00_folder`としてカレントディレクトリを変更した状態で実行すれば同じ結果が得られるかと思います。

    私個人としてはjupyterはブラウザからjupyter notebookとして使用することが多いですね。
  5. @tmngis

    Questioner

    ターミナルからカレントディレクトリを変更すればよかったのですね。
    全く気づきませんでした。。。

    今回はuasi様より連絡いただいている手法でJupyter側の初期カレントディレクトリで変更進めようと思います。
    ご回答ありがとうございました!

Your answer might help someone💌