It is a compiler rather than a direct evaluator, since it generates bytecode for a stack VM --- and also includes the interpreter for that (look at the bottom).
I think this is a question of interface vs. implementation.
Python, JavaScript, and other languages which are traditionally considered interpreted but may do (JIT) compilation in their implementation are used as if they were interpreters: to the user, there's no separate compilation step. You run python somefile.py or node somefile.js (or refresh a browser holding a page), and editing the source code causes the next invocation to take those changes immediately. Contrast this with C/C++ and Java where there is definitely an explicit compilation step in nearly all implementations.
The program in this article thus is an implementation of a compiler, but has the interface of an interpreter.
In contrast, Java also did that and I doubt if most people think of Java as interpreted. So, using a byte-code interpreter may not be the criteria most people are using to decide on this. Truthfully, I think it is all a bit arbitrary.
That is definitely a compiler and anyone with a CS degree would call it that if they were discussing its functionality, because that's technically what it is. (Referring specifically to the part which compiles Python to bytecode)
Your SQL database also has a compiler. SQL is compiled to an execution plan. Compile doesn't only mean "create a machine code executable file".
> That is definitely a compiler and anyone with a CS degree would call it that if they were discussing its functionality because that's technically what it is.
None of these assertions is correct.
> (Referring specifically to the part which compiles Python to bytecode)
So referring specifically to something different than what I explicitly specified, it's called something else.
By that reasoning, a cow is a muscle and you are an acid.
> Your SQL database also has a compiler.
"Has a" and "is a" are rather different relationships.
> Compile doesn't only mean "create a machine code executable file".