LoginSignup
2
2

More than 5 years have passed since last update.

【Pyxel】VSCodeでデバッグ実行すると pyxel.image().load() で読み込みに失敗する時の対処方法

Last updated at Posted at 2019-02-17

Pyxelから VSCodeで「デバッグ実行」すると以下のようなエラーが出て、画像の読み込みに失敗するようです。(通常のタスク実行であれば実行可能)

例外が発生しました: FileNotFoundError
[Errno 2] No such file or directory: '/Users/syun/.vscode/extensions/ms-python.python-2019.1.0/pythonFiles/cat.png'
  File "/usr/local/lib/python3.7/site-packages/PIL/Image.py", line 2634, in open
    fp = builtins.open(filename, "rb")
  File "/usr/local/lib/python3.7/site-packages/pyxel/image.py", line 47, in load
    pil_image = PIL.Image.open(filename).convert("RGB")
  File "/Users/syun/Desktop/py_click/main.py", line 50, in __init__
    pyxel.image(0).load(0, 0, "cat.png") # 画像読み込み

どうも読み込もうとしている画像のパスが、VSCodeのプラグインのパスを見ている様子……。
調べたところ、同じように悩んでいる人を発見。

・VSCode内であるPythonプログラムが実行できず、エラーが発生する
https://teratail.com/questions/162688

以下のような回答を発見

pyxel.image(0).load 内で、カレントディレクトリではなく、スタックからディレクトリを取得しているようですね。

def load(self, x, y, filename):
dirname = os.path.dirname(inspect.stack()[-1].filename)
filename = os.path.join(dirname, filename)

ここを参照してください。
https://github.com/kitao/pyxel/blob/master/pyxel/image.py

どうやら、Pyxelが inspect.stack を使っていることが原因のようです。

GitHub の Pyxel の Issue を見たところ、すでに報告されていた
・[Jupyter Notebook] Cannot load img with relative path #105
https://github.com/kitao/pyxel/issues/105

こちらによると、絶対パスで画像ロードすればできるけど……、と書いてあったので、該当のコードを絶対パスに修正

main.py
# pyxel.image(0).load(0, 0, "cat.png") # 画像読み込み
# 絶対パスで読み込み
pyxel.image(0).load(0, 0, "/Users/syun/Desktop/py_click/cat.png")

ひとまずこれで動きました。
バグフィックスされるまでは、 load() を直接使わずに絶対パスで読みこむ関数でラップした方が良さそうな感じです。
(もしくは VSCode の設定で回避できるかもしれない……)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2