jpype JVMNotFoundException при использовании pytest с tox для вызова библиотеки утят, но работает, когда pytest вызывается сам по себе - PullRequest
0 голосов
/ 31 октября 2018

У меня есть библиотека, которую я пытаюсь протестировать с несколькими версиями Python, используя tox, используя pytest для тестирования.

Это мой файл tox.ini для справки:

[tox]
envlist = py35

[testenv]
install_command = pip install --index-url https://pypi.python.org/simple --trusted-host pypi.python.org {opts} {packages}

setenv = JAVA_HOME = /c/Program\ Files/Java/jdk1.8.0_151

passenv = DISPLAY XAUTHORITY

deps = -rrequirements.txt

commands =
    python -m pytest test


В виртуальной среде, созданной с помощью tox, а именно py35, в моей библиотеке в папке .tox я могу выполнить следующую команду, и все мои тесты пройдут успешно.

python -m pytest test

Однако, когда я запускаю команду

tox

Который содержит, который должен выполнить ту же команду, я получаю ошибку.

Ошибка:

MyLibrary\MyFunction.py:37: in <module>
duckling = Duckling()

.tox\py35\lib\site-packages\duckling\duckling.py:44: in __init__
self._start_jvm(minimum_heap_size, maximum_heap_size)

.tox\py35\lib\site-packages\duckling\duckling.py:69: in _start_jvm
jpype.getDefaultJVMPath(),

.tox\py35\lib\site-packages\jpype\_core.py:121: in get_default_jvm_path
return finder.get_jvm_path()

.tox\py35\lib\site-packages\jpype\_jvmfinder.py:153: in get_jvm_path
.format(self._libfile))

E   jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.

ERROR: InvocationError for command 'MyLibrary\\.tox\\py35\\Scripts\\python.EXE -m pytest test' (exited with code 2)

ERROR:   py35: commands failed

Библиотека, связанная с этой ошибкой, duckling, а строке, которая вызывает ошибку, предшествует импорт from duckling import Duckling

Его можно найти на https://pypi.org/project/duckling/

Ранее я сталкивался с этой ошибкой, которая была устранена путем установки переменной JAVA_HOME в системных переменных (для систем Windows), указывающей на соответствующий java jdk.

На самом деле в моей виртуальной среде он правильно установлен

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_151

Я даже явно установил переменную в моем файле tox.ini, как видно выше.

Но проблема сохраняется.

Буду рад решению этой проблемы.

...