Python3.12 環境を構築するため、Pipenv で仮想環境を新しく構築している際、pipenv install
をした時に下記のエラーが出た。
Traceback (most recent call last):
File "<my-env>/.venv/bin/pip", line 5, in <module>
from pip._internal.cli.main import main
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/main.py", line 9, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py", line 8, in <module>
from pip._internal.cli import cmdoptions
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py", line 23, in <module>
from pip._internal.cli.parser import ConfigOptionParser
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py", line 12, in <module>
from pip._internal.configuration import Configuration, ConfigurationError
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/configuration.py", line 20, in <module>
from pip._internal.exceptions import (
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/exceptions.py", line 7, in <module>
from pip._vendor.pkg_resources import Distribution
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2164, in <module>
register_finder(pkgutil.ImpImporter, find_on_path)
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
この場合、おそらく
% python3 -m ensurepip --upgrade
をすれば解決する。システムグローバルの python 環境と仮想環境内で両方やっておいたほうが良い。
ただ、そもそも pipenv の環境がおかしかったので pipenv の作り直しをした。
仮想環境(venv)に入っていない状態で
% which python3
/opt/homebrew/bin/python3
% python3 --version
Python 3.11.6
/opt/homebrew/bin/python3
が使われ、 python3.11 だった。
仮想環境(venv)に入っていない状態で
% which pipenv
/opt/homebrew/bin/pipenv
% head /opt/homebrew/bin/pipenv
#!/opt/homebrew/opt/python@3.9/bin/python3.9
# -*- coding: utf-8 -*-
import re
import sys
from pipenv import cli
...
pipenv は python3.9 を使うようになっていた。
pipen が使う python3 と、デフォルトの python バージョンが違っていて面倒が発生しそうなのでで、pipenv でデフォルトの python3.11 を使うようにする。
% brew uninstall pipenv
Error: No such keg: /opt/homebrew/Cellar/pipenv
homebrew でインストールされてるものではなかった
おそらく、python3.9 の pip でインストールされていると考えられる。
後から考えれば、
% /opt/homebrew/opt/python@3.9/bin/python3.9 -m pip uninstall pipenv
するときれいにアンインストールできたのかもしれないが、どうせこの後 Python3.11 環境で作り直されると思ったので、雑に rm した。
% rm /opt/homebrew/bin/pipenv
% python3 -m pip install pipenv
% which pipenv
/opt/homebrew/bin/pipenv
さきほど削除したファイルが再生成されている。期待通り。
% head /opt/homebrew/bin/pipenv
#!/opt/homebrew/opt/python@3.11/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from pipenv import cli
...
python3.11 を使うようになっていた。期待通り。
% python3 -m ensurepip --upgrade
python3.12 環境の pipenv 環境構築の覚書
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.12"
このファイルを作ってから
% python3 -m pipenv install
※ head $(which pipenv)
の1行目(shebang)が which python3
の結果の python のパスと一致している限り、
% pipenv install
でも同じ。
% python3 -m pipenv shell
仮想環境内で、
python3 -m pip freeze
とか
pip freeze
をしてみて、エラーが出ないかを確認する。
もし、
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py", line 8, in <module>
from pip._internal.cli import cmdoptions
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py", line 23, in <module>
from pip._internal.cli.parser import ConfigOptionParser
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py", line 12, in <module>
from pip._internal.configuration import Configuration, ConfigurationError
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/configuration.py", line 20, in <module>
from pip._internal.exceptions import (
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_internal/exceptions.py", line 7, in <module>
from pip._vendor.pkg_resources import Distribution
File "<my-env>/.venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2164, in <module>
register_finder(pkgutil.ImpImporter, find_on_path)
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
このエラーが出るなら、仮想環境に入っている状態で
% python3 -m ensurepip --upgrade
をしてみる。
コメント