2017-01-28 3 views
1

Вот моя структура файла:Python ошибка импорта из xx.xx импорта *: нет модуль с именем

-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 пусто

Работает в моем местном сообществе жающая среда (MacOS Sierra питон 2.7.10):

[email protected]:~/GitHub/PaperReplication/test$ python m1/t.py 
5 
[email protected]:~/GitHub/PaperReplication/test$ echo $PYTHONPATH 
:/Users/Shangtong/DevelopmentKits/libsvm-3.20/python 

Однако он не работает на моем сервере (Python 2.7.8):

[[email protected] 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 
[[email protected] 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 
[[email protected] 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 
+0

Если вы имели 'm1/__ __ INIT py', вы можете запустить' питон -m m1.t' –

+2

... или если вы установите. 'PYTHONPATH = $ PWD', тогда это должно работать немедленно, как вы планируете. –

+1

'' 'не гарантируется расширение - используйте' $ HOME', а не '~' при настройке переменных среды. Python * может * сделать это вручную - для этой цели есть функция библиотеки, но многие программы не будут. –

ответ

1

Вы демонстрирует, что ваш PYTHONPATH содержит:

~/test/m2:~/test 

Однако ~ на самом деле не является действительным компонентом PATH! Это подсказка для вашей оболочки, чтобы заменить этот символ на ваш домашний каталог (при некорректном, в первой позиции в слове и в других случаях, где выполняются другие условия), но Python не является вашей оболочкой, и если ваша оболочка Если вы задали переменную окружения (возможно, потому, что она находится в середине строки, она не была в лидирующей позиции), это не будет соблюдаться позже, если Python явно не вызовет os.path.expanduser().

При установке переменной среды, используйте $HOME:

PYTHONPATH=$HOME/test 
+0

Это работает. Спасибо! Не могли бы вы объяснить еще одно: почему он работает в моей местной среде? –

+0

В вашей локальной среде в вашем PYTHONPATH нет '~'. –

Смежные вопросы