質問するログイン新規登録
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

Q&A

4回答

249閲覧

matprotlib C++ コンパイルエラーが表示される

kishidamisao

総合スコア17

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

0グッド

0クリップ

投稿2025/09/11 00:55

0

0

実現したいこと

matprotlib C++サイトからmatprotlib.hをダウンロードしてビジュアルスタジオC++で
サンプル図を作成しようとすると以下のエラーが表示される。
この対策方法は、パイソンバージョン(Python 3.13.7)のダウングレードしかないのでしょうか。
Python 3では、非推奨になったので、このような表示が出るようです。
matprotlib.hの修正方法をご存じの方がいましたら教えてください。

'PySys_SetArgv': deprecated in 3.11 Matplotlib_test C:\Users\misa_\test_mat\Matplotlib_test\matplotlibcpp.h 182
'Py_SetProgramName': deprecated in 3.11 Matplotlib_test C:\Users\misa_\test_mat\Matplotlib_test\matplotlibcpp.h 174

発生している問題・分からないこと

オリジナルのサイトからダウンロードしたmatplotlibcpp.h を使用してビルドするとエラー表示される

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Python 3.13.7では、非推奨になったコードを使用している。

補足

特になし

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

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

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

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

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

TakaiY

2025/09/11 01:28

pythonのバージョンを落すのが妥当だと思いますが、 3.13を使いたい理由があるのでしょうか。 ちなみに、pythonのマイナーバージョンを複数インストールして切り替えてつかうこともできます。
kishidamisao

2025/09/11 01:55

昨日作業した時点での最新バージョンだったからで特に意味はありません。
quickquip

2025/09/11 14:53

確認する気はないですがforkされたものがたくさんあって、例えば https://github.com/amadeus84/matplotlib-cpp とかはそのあたりを対応したものじゃないでしょうか?
guest

回答4

0

同様の問題が Issues に報告されています。(2024/11/16付け)

Error due to depreciated Py_SetProgramName(name); · Issue #366 · lava/matplotlib-cpp

今のところ作者からの返答がないので放置状態の様です。一応、Pull requests に Python 3.11 以降への対応版が上がっているのですが、こちらも master branch にマージされることなく今に至っています。

Fix matplotlibcpp.h used deprecated functions in Python 3.11 by GalaxyPatrick · Pull Request #357 · lava/matplotlib-cpp

こちらの matplotlibcpp.h を使用して、リポジトリに掲載されている minimal.cpp をコンパイルしてみたところ、問題なく実行形式が作成されました。

c++

1#include "matplotlibcpp.h" 2namespace plt = matplotlibcpp; 3int main() { 4 plt::plot({1,3,2,4}); 5 plt::show(); 6}

sh

1$ git clone https://github.com/GalaxyPatrick/matplotlib-cpp/ 2$ cp matplotlib-cpp/matplotlibcpp.h . 3$ g++ --version 4g++ (Ubuntu 14.2.0-19ubuntu2) 14.2.0 5 6$ g++ minimal.cpp -o minimal -std=c++23 -I/usr/lib/x86_64-linux-gnu/python3-numpy/numpy/_core/include -I/usr/include/python3.13 -lpython3.13 7$ ./minimal

投稿2025/09/11 16:29

melian

総合スコア21449

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

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

0

質問者さん、以前にも同じ質問をしていますね。
visual studio 2022、または、2019に、matplotlibのインストール方法について

quickquipさんのコメントと重なってしまいますが、matplotlib-cpp本家にプルリクが出ています。
https://github.com/lava/matplotlib-cpp

プルリクは2年くらい放置されているようですが、出した人のmatplotlibcpp.hに差し替えると最新版のPythonでも動くと思います。
https://github.com/GalaxyPatrick/matplotlib-cpp

回答を作るために試しましたが、Pythonのヘッダーとライブラリにパスを通すのが難しくて断念しました。
週末までに解決していなかったら、再度チャレンジしてみます。

無理してPythonと連携しなくても、C++ならMatplot++があります。
https://alandefreitas.github.io/matplotplusplus/

こちらのインストール方法は、以前に質問者さんに回答しました。
Matplot++のインストール方法を教えてください。

投稿2025/09/11 15:35

編集2025/09/11 15:44
hiroki-o

総合スコア1591

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

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

0

とりあえず手っ取り早く対処したいのであれば、TakaiYさんの言うとおりPythonのバージョンを下げるか、作者に対応をお願いするとかではないですか。


もし自分で直したい、と言うのであれば、軽く調べた程度ですが、情報共有しておきます。
(まぁ、自分はmatplotlibは知らないので)

だいたい、この辺りの仕様変更によるものではないですか。

  • Python インタプリタの拡張と埋め込み - 1.1.高水準の埋め込み

どうやら、初期化の処理、特にsysモジュールの情報の設定方法が変わったようです。
おおよそ、こんな感じで書き換えるのではないかと。

c

1#define PY13 2#define PY13 3#define PY_SSIZE_T_CLEAN 4#include <Python.h> 5 6int main(int argc, char *argv[]) 7{ 8 wchar_t *args[3] = { L"hoge", L"piyo", L"fuga", }; 9 10#ifdef PY13 11 { 12 PyConfig py_conf; 13 PyConfig_InitIsolatedConfig(&py_conf); 14 15 PyConfig_SetArgv(&py_conf, 3, args); 16 PyConfig_SetString(&py_conf, &py_conf.program_name, L"hoge"); 17 Py_InitializeFromConfig(&py_conf); 18 } 19#else 20 Py_SetProgramName(L"hoge"); 21 Py_Initialize(); 22 PySys_SetArgvEx(3, args, 0); 23#endif 24 PyRun_SimpleString("import sys\nprint(repr(sys.argv))\n"); 25 if (Py_FinalizeEx() < 0) { 26 exit(120); 27 } 28 return 0; 29}

投稿2025/09/11 13:15

katsuko

総合スコア3607

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

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

0

3.13を使いたい理由があるのでしょうか。

昨日作業した時点での最新バージョンだったからで特に意味はありません。

であれば、pythonの 3.11 以前のバージョンを使うのがいいと思います。

投稿2025/09/11 02:05

編集2025/09/11 02:06
TakaiY

総合スコア14610

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

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

bsdfan

2025/09/11 03:46

deprecated in 3.11 なので、3.11 もだめで、3.10 以前を使うのがいいのではないでしょうか? (3.11 で deprecated になって、3.13 で削除されたようなので、3.11 でもwarningは出るけどビルドできるかもしれません)
TakaiY

2025/09/11 04:39

> 3.11 でもwarningは出るけどビルドできるかもしれません) はい。3.11 でも、3.12 でもできると思います。 「以前」ではなく「より前」としたらよかったなと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問