BioErrorLog Tech Blog

試行錯誤の記録

CadQueryが"^CVTK not installed"エラーで使えない時の対処法

^CVTK not installedエラーでCadQueryが使えない時の対処法のメモです。

はじめに

PythonでCAD構築できるCadQueryを触りはじめたところ、import cadqueryの時点でVTK not installedというエラーが出ました。

全く同じ問題を報告するissueもあったので、同じ場所で詰まる人も結構いるのではと思っています。

github.com

原因と対処法をメモします。

# 作業バージョン
Python 3.11.9

cadquery==2.8.0
cadquery-ocp==7.9.3.1.1
cadquery-ocp-proxy==7.9.3.1.1
vtk==9.6.2

CadQueryが"^CVTK not installed"エラーで使えない時の対処法

事象

実行したのは、CadQueryで円柱を作って表示する、ごく簡単な下記のPythonスクリプトです。

import cadquery as cq
from cadquery.vis import show


def main():
    circle_solid = cq.Workplane("XY").circle(1.0).extrude(3.0)
    show(circle_solid)


if __name__ == "__main__":
    main()

このスクリプトを実行すると、しばらく何も表示されずに固まったままだったので、Ctrl + Cで処理を中断しました。

そこで表示されたのが下記のエラーです。

^CVTK not installed
Traceback (most recent call last):
  File "/Users/bioerrorlog/dev/fusion-energy-sandbox/cadquery-introduction/main.py", line 1, in <module>
    import cadquery as cq
  File "/Users/bioerrorlog/dev/fusion-energy-sandbox/cadquery-introduction/.venv/lib/python3.11/site-packages/cadquery/__init__.py", line 11, in <module>
    from .occ_impl.shapes import (
  File "/Users/bioerrorlog/dev/fusion-energy-sandbox/cadquery-introduction/.venv/lib/python3.11/site-packages/cadquery/occ_impl/shapes.py", line 297, in <module>
    from OCP.IVtkOCC import IVtkOCC_Shape, IVtkOCC_ShapeMesher
ImportError: cannot import name 'IVtkOCC_Shape' from 'OCP.IVtkOCC' (/Users/bioerrorlog/dev/fusion-energy-sandbox/cadquery-introduction/.venv/lib/python3.11/site-packages/OCP/IVtkOCC/__init__.py)

^CVTK not installedは、実際は^CVTK not installedに分けられます。

^CはCtrl + Cで処理を中断したことを意味し、VTK not installedは実際にコードから出力されたエラーです。

またVTK not installedは、import cadquery as cq時点で発生しています。

まとめると、

  • CadQueryのスクリプトを実行すると、しばらく何も表示されずに固まる
  • Ctrl + Cで処理を中断
  • エラーはimport cadquery as cq時点で発生したVTK not installedが表示される

という事象です。

対処法

この問題の対処法は、Ctrl + Cで処理を中断せずに、待つことです。

私の場合、40秒ほど待てば無事結果が表示されました。


今回発生したエラーの原因は、CadQueryのスクリプトを実行後、処理が固まってしまったと勘違いし、Ctrl + Cで処理を中断したことで、パッケージのimportが完了しなかったことです。

実際にエラーが発生した場所はこちら:

# .venv/lib/python3.11/site-packages/OCP/IVtkOCC/__init__.py
try:
  import vtk
  from ..OCP.IVtkOCC import *
except:
  print('VTK not installed')

このimportが非常に長く時間がかかるため、そのタイミングで処理を中断してしまうと、そのままexceptに捕捉されてVTK not installedのエラーが出ます。

処理が固まってしまったように見えても、焦らずに待ちましょう。

おわりに

わかってしまえばただの勘違いなのですが、"^CVTK not installed"エラーを検索してこの記事に辿り着いた方は、同じミスを犯している可能性も高いのではと思い、記録を残しました。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

参考