LoginSignup
0
0

[備忘録]sikulixでライブラリを作成し、利用する場合、同一階層でなければ読み込めないエラーに直面した話

Last updated at Posted at 2023-07-26

前書き

タイトルの通りです。
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は使いまわしたいコードはライブラリにまとめることで再利用しやすくすることが出来ます。
例:

test.sikuli
# -*- 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()
mylib.sikuli
# -*- 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

同一階層時の実行結果
image.png

別階層時
フォルダ構成

C:\Users\sakak\Documents\tool\sikulix\qiita記事ネタ>tree
フォルダー パスの一覧
ボリューム シリアル番号は 5821-FA46 です
C:.
├─mylib.sikuli
└─test
    └─test.sikuli

別階層時の実行結果
image.png

このように同一階層に無い場合、
定義したライブラリを見つけることが出来ず、Importエラーが発生する。

この事象について、ネットで解決策を探したんですが、
解決に至れる内容がありませんでした。(sikulixについて誰か記事書いて。。。)

何故ImportErrorが発生するか結構謎なんですが、
備忘録を兼ねて、この段階で投稿します。
また情報が見つかり次第、記事を更新します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0