🐕

"install-poetry.py"実行時にModuleNotFoundErrorが発生

2021/05/25に公開

環境

  • Python3.8
  • poetry 1.1.6
  • Ubuntu18.04

試したこと

ubuntuのdockerイメージ上でpython環境を構築する際、poetryのインストールでModuleNotFoundErrorが発生しました。

以下のコマンドを実行しました。

$ sudo apt install python3.8 python3-distutils
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py |  python3.8 -
Retrieving Poetry metadata

# Welcome to Poetry!

This will download and install the latest version of Poetry,
a dependency and package manager for Python.

It will add the `poetry` command to Poetry's bin directory, located at:

/root/.local/bin

You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.

Installing Poetry (1.1.6): Creating environment
Traceback (most recent call last):
  File "<stdin>", line 808, in <module>
  File "<stdin>", line 804, in main
  File "<stdin>", line 417, in run
  File "<stdin>", line 439, in install
  File "<stdin>", line 503, in make_env
ModuleNotFoundError: No module named 'virtualenv'

以下、install-poetry.pyの503行目付近です。

        with temporary_directory() as tmp_dir:
            subprocess.call(
                [sys.executable, "-m", "pip", "install", "virtualenv", "-t", tmp_dir],
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT,
            )

            sys.path.insert(0, tmp_dir)

            import virtualenv

https://github.com/python-poetry/poetry/blob/4ec09d4e6b8ca007e67bb873c96277b54986fbdb/install-poetry.py#L494-L505

エラーの原因

pipコマンドをインストールしていないことが、エラーの原因でした。
subprocess.callでステータスコードをチェックしてくれると、よかったのですが。。。
https://github.com/python-poetry/poetry/issues/4089

2021/05/25現在、poetryのインストール方法がget-poetry.pyからinstall-poetry.pyへ移行するようなので、将来的には解決しそうですね。

GitHubで編集を提案

Discussion