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.
importissues if you name your package and a module within the same, don't:xyz/xyz.pyifxyzis a package.sys.path. It makes all the modules in the package available under two names (all modules became top-level modules). It may cause hard to debug issues with the imports and the global state.