OpenRTM / OpenRTM-aist

OpenRTM-aist: RT-Middleware and OMG RTC implementation in C++ implemented by AIST
https://openrtm.org/
Other
19 stars 12 forks source link

Python3使用時にomniidlが実行できない #26

Closed Nobu19800 closed 5 years ago

Nobu19800 commented 5 years ago

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が実行されていることが問題だと考えられる。

image

To Reproduce Steps to reproduce the behavior:

  1. omnidlを実行する

Reproducibility 環境変数次第では確実に発生する。

Expected behavior

Screenshots or Logs 上にエラーメッセージを記載。

Environment

Additional context

n-kawauchi commented 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のパスが必ず先になり、このエラーが発生します。

どのように対応したらよいでしょうか。

Nobu19800 commented 5 years ago

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がインストールされていれば動作できると思います。

n-kawauchi commented 5 years ago

了解しました。試してみます。 マージモジュール作成スクリプトはsubversionで管理していますので、この修正に関してはRedmineのチケットを発行します。結果はこちらへも報告します。

n-kawauchi commented 5 years ago

対応完了しました。 修正はomniORBのマージモジュール作成スクリプトに対して行いましたので、詳細はRedmineチケットの 4652 をご覧ください。このIssueと同じタイトルのチケットです。 (URL掲載は控えます) 修正方針、動作確認結果を、チケットでリンクしているwikiに記載しています。