Jython doesn't have the -m
option, and it raises an error with from .utils import *
.
The solution is not to use relative path
sys.path.insert(0, os.path.dirname(__file__))
from utils import *
As I need to use the code both Jython and CPython, I came up with this command:
try:
from .utils import *
except Exception: # Jython or Python with python context/context.py invocation
sys.path.insert(0, os.path.dirname(__file__))
from utils import *
However, Jython doesn't seem to catch the exception, and still generates an exception.
File "context/context.py", line 9
SyntaxError: 'import *' not allowed with 'from .'
Based on How to know that the interpreter is Jython or CPython in the code?, I tried
binary = sys.executable
if binary is None:
sys.path.insert(0, os.path.dirname(__file__))
from utils import *
else:
from .utils import *
I still get the SyntaxError
, why Jython interpreter keeps parsing from .utils import *
when it was supposed to do so; I mean, this code works.
binary = sys.executable
if binary is None:
sys.path.insert(0, os.path.dirname(__file__))
from utils import *
else:
pass
This is my Jython information:
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_51
Type "help", "copyright", "credits" or "license" for more information.