Я строю класс Java для Jython. Задача, которую я пытаюсь решить, - заставить Jython искать модули python в рабочем каталоге приложения (также известном как каталог выполнения программы).настройка пути модуля импорта в Jython - странное поведение
Я делаю так, прилагая System.getProperty("user.dir")
ценности sys.path:
pySysState = new PySystemState();
//add working directory into sys.path
pySysState.path.append(new PyString(System.getProperty("user.dir")));
log_.info("Jython sys state initialized. sys.path: " + this.pySysState.path);
Я получаю ImportError исключения:
python module 'user_module' was not found. sys.path: ['<other jars>\\Lib', '/<path to jython>/Lib', '__classpath__', '__pyclasspath__/', 'C:\\Users\\vvlad\\IDEAProjects\\transform']
ImportError: No module named scheduled_helper
at org.python.core.Py.ImportError(Py.java:290)
at org.python.core.imp.import_first(imp.java:750)
at org.python.core.imp.import_name(imp.java:834)
...
Где C:\\Users\\vvlad\\IDEAProjects\\transform
является каталогом приложений.
В sys.path
выглядит следующим образом:
Импорт отлично работает, когда я вручную указать полный путь к рабочей директории в Jython переменной python.path реестра. И sys.path
выглядит иначе:
>>sys.path: ['C:\\Users\\vvlad\\IDEAProjects\\transform', '<other jars path>\\Lib', '/<path to jython>/jython-2.5.2.jar/Lib', '__classpath__', '__pyclasspath__/', ]
Так импорт отлично работает, когда рабочий каталог поставляется в качестве первой записи в sys.path
. Но не работает, когда рабочий каталог является последней записью.
Я использую Jython 2.5.2 и запускаю тесты на машине Windows из среды IntelliJ IDEA.
Plan B для меня было бы установить Jython реестр python.path с user.dir
значением перед инициализацией PySysState
- но это приведет к некоторому скрытому поведению.