Here is my file structure:
-test --m1 ---t.py --m2 ---__init__.py ---utils.py t.py:
from m2.utils import * print foo() utils.py:
def foo(): return 5 __init__.py is empty
It works in my local environment (macOS Sierra python 2.7.10):
Shangtong@Shangtong:~/GitHub/PaperReplication/test$ python m1/t.py 5 Shangtong@Shangtong:~/GitHub/PaperReplication/test$ echo $PYTHONPATH :/Users/Shangtong/DevelopmentKits/libsvm-3.20/python However it doesn't work in my server (Python 2.7.8):
[shangton@jasper test]$ python m1/t.py Traceback (most recent call last): File "m1/t.py", line 1, in <module> from m2.utils import * ImportError: No module named m2.utils [shangton@jasper test]$ ls -al total 16 drwxrwxr-x 4 shangton shangton 4096 Jan 28 09:10 . drwx------ 4 shangton shangton 4096 Jan 28 10:09 .. drwxrwxr-x 2 shangton shangton 4096 Jan 28 09:12 m1 drwxrwxr-x 2 shangton shangton 4096 Jan 28 10:09 m2 [shangton@jasper test]$ echo $PYTHONPATH /global/software/python/Python-2.7.8/lib/python2.7/site-packages/:/global/software/python/Python-2.7.3/lib/python2.7/site-packages/:~/PaperReplication/:~/test/m2:~/test
m1/__init__.py, you could runpython -m m1.tPYTHONPATH=$PWD, then this should work immediately as you intend.~isn't guaranteed to expand -- use$HOME, not~, when setting environment variables. Python may do it manually -- there's a library function for the purpose -- but many programs won't.