Closed Nobu19800 closed 5 years ago
エラー原因はomniORBのマージモジュールにあります。 omniidlでC++とPythonどちらのIDLコンパイルも可能となる環境を整えていますが、マージモジュールはPython2.7環境でビルドしたものです。よって下記python.pyがpython2.7用のためエラーになるとの理解です。
Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.3_vcxx\lib\python\omniidl_be\python.py
環境変数PATHで、OpenRTM-aistよりPythonのパスが先に設定されている場合は、Python3.7環境でも omniidlのback-endオプションを切り替えてのidlコンパイルOKです。
>cd ImageProcessing\opencv\components\TkCalibGUI
>omniidl.exe -bpython idl/CalibrationService.idl
OK
>omniidl.exe -bcxx idl/CalibrationService.idl
OK
上記に対してPATHの設定順を入れ替え、OpenRTM-aistのパスの方が先に設定されているとPython3環境ではご指摘のエラーが出ることを確認しました。Python2.7環境では問題ありません。
OpenRTM-aist-Pythonは、Pythonバージョンが複数インストールされていても、それらのインストール先にコピーされます。それぞれパスが異なるので問題ありません。
一方、Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.3_vcxx\bin\x86_win32は固定です。
omniORB\4.2.3_vcxx\lib\python\omniidl_be\python.pyが、Pythonが複数バージョンインストールされている環境でパスの優先順位が一番のバージョンに対応したものになっていないと、エラーは解消しないと思えます。
Python3.6または3.7の場合、インストール時の選択によってはユーザ変数のPathに定義されます。レジストリではHKCUキーでの管理です。この場合、PATHはシステム変数の定義の後にユーザ変数定義が追加されるので、PythonよりOpenRTM-aistのパスが必ず先になり、このエラーが発生します。
どのように対応したらよいでしょうか。
omniidl.exeの動作はPython2.7でもPython3.7でも同じだと思うので、C:\Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.3_vc141\bin\x86_win32
以下のoiniidl.exeをPython2.7をインストールしていない環境でも動作できるようにすればよいのではないでしょうか。
おそらくですが、python27.dllがインストールされていれば動作できると思います。
了解しました。試してみます。 マージモジュール作成スクリプトはsubversionで管理していますので、この修正に関してはRedmineのチケットを発行します。結果はこちらへも報告します。
対応完了しました。 修正はomniORBのマージモジュール作成スクリプトに対して行いましたので、詳細はRedmineチケットの 4652 をご覧ください。このIssueと同じタイトルのチケットです。 (URL掲載は控えます) 修正方針、動作確認結果を、チケットでリンクしているwikiに記載しています。
Describe the bug Python3をインストールした環境でomniidlを実行しようとすると以下のエラーメッセージが表示される。おそらく、
C\Python37
以下ではなく、C:\Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.3_vc141\bin\x86_win32
以下のomnidl.exeが実行されていることが問題だと考えられる。To Reproduce Steps to reproduce the behavior:
Reproducibility 環境変数次第では確実に発生する。
Expected behavior
Screenshots or Logs 上にエラーメッセージを記載。
Environment
Additional context