0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Poetryで管理しているプロジェクトの名前を変えたら、`poetry run mypy`を実行したときに"Command not found"というエラーが発生した

Posted at

環境

  • Python 3.12.4
  • Poetry 1.8.3

はじめに

Poetryを使って、Pythonのアプリケーションを開発しています。
仮想環境はプロジェクト内に作成するように設定しています。

$ pwd
/home/yuji/tmp/awesome

$ tree
.
├── README.md
├── awesome
│   └── __init__.py
├── poetry.lock
├── poetry.toml
├── pyproject.toml
└── tests
    └── __init__.py

2 directories, 6 files

$ ls .venv/
bin  lib  pyvenv.cfg
pyproject.toml
[tool.poetry]
package-mode = false


[tool.poetry.dependencies]
python = "^3.12"
mypy = "^1"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
poetry.toml
[virtualenvs]
in-project = true
$ poetry run python --version
Python 3.12.4

$ poetry run mypy --version
mypy 1.10.1 (compiled: yes)

何が起きたのか

/home/yuji/tmp/awesomeディレクトリの名前を、awesome2に変更しました。

$ cd /home/yuji/tmp/

$ mv awesome awesome2

ディレクトリ名変更後では、poetry run mypy --versionを実行できませんでした。

$ cd awesom2

$ poetry run mypy --version
Command not found: mypy

ただし、poetry run python -m mypyは実行できました。

$ poetry run python -m mypy --version
mypy 1.10.1 (compiled: yes)

poetry run mypyを実行できない原因

/home/tmp/awesome2/.venv/bin/mypyの中身は以下の通りです。シバンには/home/yuji/tmp/awesome/.venv/bin/pythonと絶対パスが記載されています。なので、awesomeディレクトリの名前を変えたら、動かくなくなったようです。

/home/tmp/awesome2/.venv/bin/mypy
#!/home/yuji/tmp/awesome/.venv/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from mypy.__main__ import console_entry
if __name__ == "__main__":
    sys.argv[0] = re.sub(r"(-script\.pyw|\.exe)?$", "", sys.argv[0])
    sys.exit(console_entry())

「仮想環境がプロジェクト内にあるので、プロジェクト名を変えても問題ない(相対パスで記載されているだろう)と」思っていたため、エラーの原因を特定するのに少し時間がかかってしまいました。

ちなみに、.venv/bin/pythonはシンボリックリンクなので、ディレクトリ名を変更してもpoetry run pythonで実行できます。

$ ls .venv/bin/python -l
lrwxrwxrwx 1 yuji yuji 48 Jul 19 09:46 .venv/bin/python -> /home/yuji/.pyenv/versions/3.12.4/bin/python3.12

解決方法

Poetryで管理しているプロジェクトのパスが変わったら、仮想環境を作り直しましょう。

補足

.venv/bin/mypyのシバンは、pipの以下のコードで生成しているようです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?