There is a technical point of view:
a compiler is a processus which transforms a view of a program into another view, lowering the level of abstraction
a interpreter is a processus which execute a program, possibly first transforming the source in another view, but that one will not have a significantly lower level of abstraction.
There is a user point of view:
a compiler just transfor the program, it won't be executed there until another step
an interpreter will execute the program.
There is some confusion lying in the difference between the two.
A interpreter as a user see it sometimes use compilation techniques. Upfront, compiling the source program in a intermediate representation which is of a significantly lower level of abstraction than the source before interpreting it, maybe even going down to machine level (load and go compiler). Sometimes detecting heavily used code and compiling just that part or applying special optimization (just in time compilation).
Compilers don't have to go to machine language. C is a popular target for experimental languages. Another popular choice is a more or less machine like intermediate code which has to be interpreted after by a virtual machine, sometimes exposing the byte code as such, sometimes bundling the virtual machine with the byte code in one executable (it was the way one of the most popular and widespread Pascal implementation worked).
The virtual machine is itself an interpreter, but may apply compilation techniques as written above.
Compilers sometimes generate a more or less machine like description and delegates the true machine code generations to the linker. That generation may also be done at installation time (AS/400, and successors whose name I can't remember in the ?Series soup, is the longest during system I know which is using that method).
Now your questions:
- Is an interpreter doing the same job as something like the JVM, just without the byte-code?
Sometimes yes, sometimes it is the bundling of the java compiler and the JVM.
- For python is the interpreter taking the high-level code and translating it into machine code?
There are several Python interpreters and systems. I don't think the most popular one goes down to machine code.
- The Java virtual machine needs to be installed on a machine for a java program to run on it - is it similar for python - if the interpreter is installed on the target machine then the python program will run?
The most popular Python implementation is an interpreter which need to be installed.
- Is the JVM (& .net framework) effectively byte-code interpreters?
Yes, what I called "user level interpreters", they may apply true compilation techniques to offer better performance.