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.