技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

【エラー対応】AssertionError: Bad argument number for arguments: 7, expecting 6

課題

Cythonで高速化を図ろうと、setup.pyを実行するとこんなエラーが出た。

f:id:yonesuke0716:20201001114039p:plain
なんだこれ・・

なんか引数の数が合ってないってメッセージで、Anacondaのパッケージ内で起こってることがわかりました。(gast・・?)
だから、おそらくどっかのライブラリ同士のver不整合なんだろうなとは予測できます。


Cythonでこういうエラーメッセージが他にあるかなぁとおもってググっても全くでねぇ。。


なんでみんなハマらないのか不思議。


解決するのにちょっと時間かかったので、同じようなエラーでハマったら参考にしてください。

解決策

gastをアップグレードしたら直った。


以下のコマンドでアップグレードできます。

pip install -U gast

私のgastのversionは0.2.2で、最新(2020/10/1)は0.4.0です。


この解決策は以下のGitでヒントを得ました。
github.com

こちらはPythranでお困りのようでしたので、同様のCコンパイラであるCythonでもいけるんじゃね?と思ってやってみたらいけました。

gastってなんぞ?

上記Gitには、解決策は記載されていますが、なぜ解決したのかが書いてません。


まず「gast」ってなんだよって話ですよね。


以下公式の説明。

「Python2およびPython3の抽象構文木(AST)を表す汎用AST。

GASTは、標準のastモジュールからast.parseによって生成された、さまざまなPythonバージョンのAST間の互換性レイヤーを提供します。」


抽象構文木(AST)

もうみただけで「うわぁ・・」ってなりそうな文字ですね。抽象構文木、なんて。


色々Wikiとか、情報工学の研究者の論文とかをチラッと覗いてみましたが、更に「うわぁ・・」ってなりました。


いわゆるコンパイル時の解釈アルゴリズムの一部みたいなもん?か?


うーん、ちょっと私ではすぐに理解が追い付かない。詳しい方いましたら教えてください!


コンパイルの意味は知ってても、中身のアルゴリズムとか仕組みは知らなかったから、これを機にコンパイラについても勉強してみます。


もう少し説明できるくらい理解できたらどこかで紹介しますが、本題はエラー解決ですので、一旦これでおしまい!