我有一个库,我正在尝试使用tox
和pytest
进行多个python版本的测试。
这是我的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/
我以前遇到过此错误,可以通过在系统变量(对于Windows系统)中将JAVA_HOME变量设置为指向相应的Java jdk来解决。
实际上在我的虚拟环境中,它已正确设置
echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_151
我什至已经在我的tox.ini文件中显式设置了变量,如上所示。
但是问题仍然存在。
我很乐意为此解决方案。