[C++] 353 Pythonスクリプトの実行(再) / Rustの現状

[Mac M2 Pro 12CPU, MacOS Ventura 13.6, clang 15.0.0]

以前にも扱いましたが、おさらいしておきます。

Rustでも簡単にPythonスクリプトを実行できます。ただRustは安全性が担保されない限りコーディングがなかなか先に進まないので、趣味としては楽しめないです。Javaのぬるぽ地獄に似たような窮屈さを感じます。

昨年2022年あたりがピークだったのか、今現在Rustブームは落ち着いているようです。プロダクト責任者に近い上級プログラマだけが熱を上げている印象です。Pythonのようなお手軽さが全くない言語ですから、ユーザーの新規参入が先細りにならないか心配です。

私としては、もしビジネスが絡んだら仕方なく使うというスタンスです。

#define PY_SSIZE_T_CLEAN
#include </Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/Python.h>

void sheetNaming() {
    Py_Initialize();

    // pyファイルの指定(OutingCosts.py)
    PyObject* myModuleString = PyUnicode_FromString((char*)"OutingCosts");

    // pyファイルのモジュール化
    PyObject* myModule = PyImport_Import(myModuleString);

    // pyファイル内の関数を指定
    PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"outingcosts");

    // 関数の引数を設定
    PyObject* args = NULL;
    // 引数2つの場合
    // PyObject* args = PyTuple_Pack(2,PyUnicode_FromString(path),PyUnicode_FromString(path2)))

    // 関数を実行
    PyObject* myResult = PyObject_CallObject(myFunction, args);

    Py_Finalize();

    return ;

}

int main() {
    sheetNaming();

    return 0;
}
# コンパイラ設定
COMPILER = clang++
DEBUG = -g

# フラグ設定
CPPFLAGS = -std=c++20
LDFLAGS = -lc++

# includeパス(-I)
INCLUDE = -I./include \
-I/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10

# ライブラリ(-l)
LIBRARY_l = -lpython3.10

# ライブラリパス(-L)
LIBRARY_L = -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/3.10/lib

# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)

# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src/%.cpp,/%.o,$(SRCS)))

# 実行ファイル
TARGETDIR = ./bin
TARGET = test

# cppファイルからoファイル作成 $<:依存ファイル
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
	$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<

# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS)

# コンパイル&ビルド
.PHONY:all
all: clean $(OBJS) $(TARGET)

# oファイル・実行ファイル削除
.PHONY:clean
clean:
	rm -rf $(OBJS) $(TARGETDIR)/$(TARGET) $(TARGET).app
# 導入するPythonスクリプトのあるディレクトリ設定
export PYTHONPATH="/code/Python/library/python_module"

# importする自製ライブラリのあるディレクトリ設定
export PYTHONPATH="/code/Python/library"
RustでのPythonスクリプト実行例
Objective-CでのPythonスクリプト実行例