oct2py isn't seeing OCTAVE_EXECUTABLE environment variable (Windows)

John Chrysostom picture John Chrysostom · Feb 12, 2019 · Viewed 7.1k times · Source

So, I'm trying to use oct2py on Windows, like so:

from oct2py import octave

That's literally the only code I need to reproduce the error.

When I execute this, I get OSError: Octave Executable not found, please add to path or set"OCTAVE_EXECUTABLE" environment variable. However, I have already set OCTAVE_EXECUTABLE as a system variable, which points to "C:\Octave\Octave-4.4.1\bin\octave-cli-4.4.1.exe". Opening up the command line and running %OCTAVE_EXECUTABLE% gives me the Octave CLI, so I know it's right.

I've tried rebooting. I've also tried adding the Octave folder to my Path and removing OCTAVE_EXECUTABLE. Neither work.

EDIT: I've also tried using just octave-cli.exe, and I've tried doing print(os.environ['OCTAVE_EXECUTABLE']), which returns the expected path.

Any ideas here?

Answer

ChesuCR picture ChesuCR · May 3, 2019

In spite of what you mention in your comment:

It appears that, somewhere along the line, octave.exe got replaced with octave-cli.exe. There is no longer an octave.exe distributed with the Octave package. Others have successfully pointed OCTAVE_EXECUTABLE at octave-cli.exe

Recently more people had a similar issue and the oct2py developers fixed it in the 5.0.0 version some hours ago. Actually they said:

Ah, I see what the issue is here. The convenience octave instance is created before you get a chance to set the executable property. Given that fact, I think the only right answer is to remove the executable argument in favor of using PATH or the OCTAVE_EXECUTABLE environment variable.

Anyway I had to adapt my code to make it work updating the environment variable OCTAVE_EXECUTABLE:

import shutil
import os
import sys

if sys.platform == 'win32':
    # os.environ['OCTAVE_EXECUTABLE'] = shutil.which('octave')
    # >> I had to replace this with this other line >>

    os.environ['OCTAVE_EXECUTABLE'] = shutil.which('octave-cli.exe')