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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Jinja2

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

Q&A

解決済

1回答

1046閲覧

PlatformIOにおいて, ModuleNotFoundErrorによりビルドができない.

Katy7

総合スコア20

Jinja2

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

0グッド

0クリップ

投稿2023/08/01 08:37

実現したいこと

PlatformIOにおいて, ModuleNotFoundErrorを解決したい.

環境

Windows11
PlatformIO on VScode
Python 3.8.17
Jinja2 3.1.2
PlatformIO Core 6.1.9 Home 3.4.4
platfomrm nxplpc 5.3.0
MbedOS 5.15.4

詳細

私は現在VScodeの拡張機能のPlatformIOを用いてビルドを行っています. 当初はビルドが行えていたのですが, 先日PlatformIOのアップデートを行ったところビルドができなくなってしまいました. (アップデート直前までビルドをしていたわけではないので, これが原因なのかは微妙なところです.)

ビルドを行うと次のようなエラーが起こってしまいます.

ModuleNotFoundError: No module named 'jinja2': File "C:\Users\***\.platformio\penv\Lib\site-packages\platformio\builder\main.py", line 175: env.SConscript("$BUILD_SCRIPT") //以後依存関係が続き...最後に File "C:\Users\***\.platformio\packages\framework-mbed\tools\build_api.py", line 32: from jinja2 import FileSystemLoader

つまり, jinja2というmoduleがないようです.

試したこと

そこで以下の内容を確かめました.
①pythonとjinja2のバージョン互換性
②jinja2がインストールされて, 単体で読み込めるかどうか
➂Jinja2とjinja2のエイリアスが結びついているのかどうか

①pythonとjinja2のバージョン互換性

platformIOを実行している同一ターミナル上で以下のコマンドを実行しpythonとjinja2のバージョンを確認しました.(以降ターミナルはこれと同じ)

python --version//pythonのバージョン pip list//jinja2のバージョン //結果 Python 3.8.17 Jinja2 3.1.2

次に以下のサイトで検索をかけてjinja互換性を確認しました.(jinja2は今のjinjaの呼び方らしい)
https://jinja.palletsprojects.com/en/3.1.x/changes/

これによると, jinja2はversion 3.1.0で python 3.6のサポートを終了しているのですが, python3.8.17については大丈夫だということがわかりました.

②jinja2がインストールされて, 単体で読み込めるかどうか

次にjinja2がpythonに読み込まれているか確認しました.
まず, 以下のコマンドでmoduleのpathが通っているか確認しました.

python >>import sys >>print (sys.path) //結果 ここにきちんとjinja2があった. C:\\anaconda3\\lib\\site-packages

すると, きちんとmoduleのpathが通っていることがわかりました.
またpythonプロンプトを起動し, jinja2を単体でimportすると読み込めることがわかりました.

python >>import jinja2 //これは大丈夫だった.

➂Jinja2とjinja2のエイリアスが結びついているのかどうか

①でpip listで確認した際にjinja2ではなくて, Jinja2と表示されました. そこで, このエイリアスが適応されているか確認することにしました.

しかし, このエイリアスを一覧として表示する方法が分からなかったので, 該当のエラー箇所をJinja2に書き換えることで同様のエラーが起こるかどうかを確認しました.

File "C:\Users\***\.platformio\packages\framework-mbed\tools\build_api.py", line 32: from Jinja2 import FileSystemLoader

結果はエラーの一番下の箇所が次のようにJinja2に変わるだけでした.
つまり, エイリアス自体は問題ではないということがわかりました.

教えてほしいこと

具体的にエラーを解決する方法または, エラーの原因を教えていただけると幸いです.

私としては上記以外には以下のような可能性しか考えられないのですが, どう対処すべきかわからないです.

  1. PlatformIOのバージョンが関係することがあるのでしょうか?
  2. 少し古いplatformを対象にビルドをしているのが原因?だとしてもなぜ?(MbedOS 5.15.4, nxplpc 5.3.0, できればこのままにしたい)

以下のplatformIO communityでも確認しましたが, 最近jinja2に関する同様の現象は確認されませんでしたので, 2が原因の可能性があるかもしれません.
https://community.platformio.org/

拙い部分もあると思いますが, どうぞよろしくお願いいたします.

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

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

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

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

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

guest

回答1

0

自己解決

長い時間をかけてようやく解決いたしました。
あれから➃コマンドプロンプトでwhere pythonを実行し、複数のpythonの競合がないかや、
⑤最新のplatform(MbedOS 6.17.0)に一新したり、⑥anacondaをuninstallし、pythonを単体でinstallしたりなど
いろいろ試しましたが解決いたしませんでした。

途方に暮れていたところ、こちらの記事の一番下の方に光明が見えました。
https://keiorogiken.wordpress.com/2021/12/17/mbed-x-platformio%E3%81%A7%E6%89%8B%E5%8B%95%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97-%E3%81%93%E3%82%8C%E3%81%A0%E3%81%8B%E3%82%89pio%E3%81%AF/

そのまま同じ現象についての注意点が書かれていたのです。
platformIOは自分自身のpythonを用いて、ビルドを実行していたことがわかりました。
(このpythonはpioをきちんと知らないと気づけないかも)
このpythonにmoduleをinstallしたところ解決いたしました。

pythonが複数ある可能性や参照先が違う可能性は最初から考えてはいたのですが、where pythonでも出てこず、
VSCodeやそのterminalのpython参照先を気にしていたので、pioが自身で参照先を持っていることは考慮に入れてませんでした。
私のミスが皆さんのお力になれば幸いです。

投稿2023/08/03 15:24

Katy7

総合スコア20

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

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

Katy7

2023/08/29 08:01

拡張機能の設定にあるUse Built-in Pythonのフラグを外せば、 おそらくアップデートのたびにモジュールをインストールしなくてすみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問