前書き
タイトルの通りです。
SikuliXでライブラリを作成し、利用しようとしたところ利用できなかったり利用できたりと意味不明だったので、
記事にしたためてメモ書きとして残します。
実行環境は
windows10
SikulixIDE-2.0.5
となります
2023年8月18日 追記 解決しました
sys.path.appendの書き方が悪かっただけでした。
os.pathを使って書くべきなので下記の書き方が良いです。
sys.path.append(os.path.dirname(os.path.abspath('__file__')) + '/mylib.sikuli')
import mylib
1つ気を付けることが、
IDEで直接Sikulixを再生している場合、
os.path.dirname(os.path.abspath('__file__'))
上記の値が示す場所がjarのある場所となるので、jarはモジュールと同一階層に配置する必要があります。
内容
SikuliXは使いまわしたいコードはライブラリにまとめることで再利用しやすくすることが出来ます。
例:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
sys.path.append("C:\Users\sakak\Documents\tool\sikulix\qiita記事ネタ\mylib.sikuli")
import mylib
def main():
mylib.init()
main()
# -*- coding: utf-8 -*-
# 更新したらIDEを再起動すること
import sys
sys.setdefaultencoding('utf-8')
from sikuli import *
def init():
print('init処理')
Settings.MoveMouseDelay = 0
def waitClick(img, time):
wait(img, time)
click(img)
上記コードの場合、再利用したいコードをmylib.sikuliに格納し、
それをtest.sikuliで読み込んで利用しています。
この時、mylib.sikuliとtest.sikuliが同一階層でなければ、import出来ないという問題に直面しました。
実行結果
同一階層時
フォルダ構成
C:\Users\sakak\Documents\tool\sikulix\qiita記事ネタ>tree
フォルダー パスの一覧
ボリューム シリアル番号は 5821-FA46 です
C:.
├─mylib.sikuli
└─test.sikuli
別階層時
フォルダ構成
C:\Users\sakak\Documents\tool\sikulix\qiita記事ネタ>tree
フォルダー パスの一覧
ボリューム シリアル番号は 5821-FA46 です
C:.
├─mylib.sikuli
└─test
└─test.sikuli
このように同一階層に無い場合、
定義したライブラリを見つけることが出来ず、Importエラーが発生する。
この事象について、ネットで解決策を探したんですが、
解決に至れる内容がありませんでした。(sikulixについて誰か記事書いて。。。)
何故ImportErrorが発生するか結構謎なんですが、
備忘録を兼ねて、この段階で投稿します。
また情報が見つかり次第、記事を更新します。