Разница между , имеющим _ init _. Py и , не имеющим единицу в каталоге модулей:
Когда вы иметь __init__.py
(пусто), вы можете импортировать модуль, используя
from dirname import MyModule
Но когда у вас нет _ init _. pyвообще, вы не можете импортировать модуль без добавления пути до этого модуля в PYTHONPATH. В этом случае from dirname import MyModule
FAILS или сообщает об ошибке.
# Структура каталога / модуля без _ init _.py
[root@Machine python]# cd NoInitModule/
[root@Machine NoInitModule]# pwd
/python/NoInitModule
[root@Machine NoInitModule]# ls -l
total 4
-rw-r--r--. 1 root root 44 Jan 16 07:02 ModuleX.py
# Структура каталога / модуля с _ init _. py
[root@Machine NoInitModule]# cd ../InitModule/
[root@Machine InitModule]# ls -l
total 4
-rw-r--r--. 1 root root 0 Jan 16 07:13 __init__.py
-rw-r--r--. 1 root root 49 Jan 16 07:12 ModuleY.py
[root@Machine InitModule]#
Примеры:
# NO _ init _. Py, из оператора модуля импорта dir - НЕ РАБОТАЕТ
[root@Machine python]# cat impomod.py
from NoInitModule import ModuleX
ModuleX.printBye()
[root@Machine python]# python impomod.py
Traceback (most recent call last):
File "impomod.py", line 7, in <module>
from NoInitModule import ModuleX
ImportError: No module named NoInitModule
[root@Machine python]#
# NO _ init _. Py, оператор импорта - НЕ РАБОТАЕТ
[root@Machine python]# vim impomod.py
[root@Machine python]# cat impomod.py
#from NoInitModule import ModuleX
import ModuleX
ModuleX.printBye()
[root@Machine python]# python impomod.py
Traceback (most recent call last):
File "impomod.py", line 8, in <module>
import ModuleX
ImportError: No module named ModuleX
[root@Machine python]#
# NO _ init _.py, INSERT путь в PYTHONPATH, импортировать оператор модуля после вставки пути - РАБОТАЕТ
[root@Machine python]# vim impomod.py
[root@Machine python]# cat impomod.py
import sys
sys.path.append('/python/NoInitModule')
print sys.path
import ModuleX
ModuleX.printBye()
[root@Machine python]# python impomod.py
Bye from Module X with no __init__.py
[root@Machine python]#
# HAVING _ init _. py, Нет INSERT пути, изоператор модуля импорта dir - РАБОТАЕТ
[root@Machine python]# cat impXmod.py
import sys
from InitModule import ModuleY
ModuleY.printSeeU()
[root@Machine python]#
[root@Machine python]# python impXmod.py
See you from Module Y having __init__.py
# HAVING _ init _. py, нет INSERT пути, оператор модуля импорта - НЕ РАБОТАЕТ
[root@Machine python]# vim impXmod.py
[root@Machine python]# cat impXmod.py
import sys
#from InitModule import ModuleY
import ModuleY
ModuleY.printSeeU()
[root@Machine python]# python impXmod.py
Traceback (most recent call last):
File "impXmod.py", line 3, in <module>
import ModuleY
ImportError: No module named ModuleY
Конечно, проблема подпапок может быть добавлена к этому