質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

720閲覧

AttributeError: module 're' has no attribute '_pattern_type' エラーについて

yuta1989

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2022/08/04 03:19

編集2022/08/04 03:30

pytest を実行した時に AttributeError: module 're' has no attribute '_pattern_type' のエラーが出て、確認しています。
エラーの内容は下記になります。

tests/scenario_update/test_scenario_update.py:66: in setup_mock s3.create_bucket(Bucket=Config().s3_bucket()) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/client.py:314: in _api_call return self._make_api_call(operation_name, kwargs) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/client.py:598: in _make_api_call http, parsed_response = self._endpoint.make_request( /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/endpoint.py:148: in make_request return self._send_request(request_dict, operation_model) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/endpoint.py:176: in _send_request while self._needs_retry(attempts, operation_model, request_dict, /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/endpoint.py:270: in _needs_retry responses = self._event_emitter.emit( /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/hooks.py:227: in emit return self._emit(event_name, kwargs) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/hooks.py:359: in _emit return super(AliasedEventEmitter, self)._emit( /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/hooks.py:210: in _emit response = handler(**kwargs) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:183: in __call__ if self._checker(attempts, response, caught_exception): /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:250: in __call__ should_retry = self._should_retry(attempt_number, response, /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:269: in _should_retry return self._checker(attempt_number, response, caught_exception) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:316: in __call__ checker_response = checker(attempt_number, response, /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:222: in __call__ return self._check_caught_exception( /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/retryhandler.py:359: in _check_caught_exception raise caught_exception /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/endpoint.py:219: in _get_response http_response = self.http_session.send( /.pyenv/versions/3.9.10/lib/python3.9/site-packages/botocore/vendored/requests/sessions.py:573: in send r = adapter.send(request, **kwargs) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/moto/packages/responses/responses.py:308: in unbound_on_send return self._on_request(adapter, request, *a, **kwargs) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/moto/packages/responses/responses.py:238: in _on_request match = self._find_match(request) /.pyenv/versions/3.9.10/lib/python3.9/site-packages/moto/packages/responses/responses.py:199: in _find_match if not self._has_url_match(match, request.url): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <moto.packages.responses.responses.RequestsMock object at 0x7f25d7133730> match = {'callback': <moto.core.utils.convert_flask_to_responses_response object at 0x7f25d5959760>, 'content_type': 'text/plain', 'match_querystring': False, 'method': 'PUT', ...} request_url = 'https://amsui-devdev-ap-northeast-1-111122223333-main.s3.ap-northeast-1.amazonaws.com/' def _has_url_match(self, match, request_url): url = match['url'] if not match['match_querystring']: request_url = request_url.split('?', 1)[0] if _is_string(url): if match['match_querystring']: return self._has_strict_url_match(url, request_url) else: return url == request_url > elif isinstance(url, re._pattern_type) and url.match(request_url): E AttributeError: module 're' has no attribute '_pattern_type' /.pyenv/versions/3.9.10/lib/python3.9/site-packages/moto/packages/responses/responses.py:221: AttributeError

エラーが出たファイルが

/.pyenv/versions/3.9.10/lib/python3.9/site-packages/moto/packages/responses/responses.py

となっているので、site-packagesにインストールされているmotoライブラリのバージョンの問題かなと思ったのですが、motoのバージョンを上げることが正しい解決策でしょうか?

docker buildする際に、requirements.txtでライブラリをインストールしていて、motoのバージョンは1.1.13を指定しています。

Python3.6 だった時は moto のバージョン1.1.13 で問題なく動作していましたが、今回Pyrhon3.9に上げてから pytest で失敗するようになりました。

【追記】
試しにmoto の最新バージョン3.1.16 に上げたら

ImportError: cannot import name 'mock_rds_deprecated' from 'moto'

というエラーが出て、情報があまり出てこず、詰まっています。
上げるバージョンの問題でしょうか?

最新バージョン3.1.16 に上げた後に pip check で 依存関係を確認しましたが、問題ないみたいです。

bash-4.2# pip check No broken requirements found.

requirements.txt(moto の最新バージョン3.1.16 に上げた後)

requests boto3==1.9.201 moto==3.1.16 mock==2.0.0 pytest==3.2.2 pytest-cov==2.5.1 pytest-mock==1.6.3 pytest-pep8==1.0.6 pytest-pythonpath==0.7.1 pycrypto

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/08/04 04:01

Python 3.7 で re._pattern_type が廃止された模様です。 Python 3.7 removes `re._pattern_type` · Issue #1546 · spulec/moto" https://github.com/spulec/moto/issues/1546 > motoのバージョンを上げることが正しい解決策でしょうか? そうなりますね。
yuta1989

2022/08/04 04:09

ご回答ありがとうございます! 少しずつmotoのバージョンを上げてみて、適切なバージョンを確認します。
guest

回答1

0

自己解決

boto3とmotoのバージョンを下記のように調整したらエラーが解消されました。

requirements.txt

requests boto3==1.17.14 moto==2.0.0 mock pytest pytest-cov pytest-mock pytest-pep8 pytest-pythonpath pycrypto awscli docker

投稿2022/08/04 08:06

yuta1989

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問