Использование init .py
Единственная проблема, возникающая при динамическом изменении sys.path, заключается в том, что вам нужно повторять его в каждом скрипте и жестко кодировать пути. Это становится грязным и не СУХИМ, если у вас есть даже два или три файла.
Вместо этого, если ваша файловая структура выглядит следующим образом:
~/foo/__init__.py
~/foo/foo.py
~/foo/bar/__init__.py
~/foo/bar/baz.py
Здесь init .py - это пустые файлы, созданные с помощью touch, тогда как foo.py и baz.py - это настоящие скрипты на python. Тогда вы можете сделать что-то вроде этого:
import sys
try:
from foo import foo
from foo.bar import baz
except ImportError:
"%s is not in %s. Add to your PYTHONPATH in ~/.bashrc" % \
(os.path.expanduser("~/foo"),sys.path)
Структурирование ваших вещей как пакета с самого начала - это небольшая дополнительная работа, но значительно упрощает масштабирование проекта позже и возможность видеть, откуда идет импорт. Более того, если вы перемещаете вещи вокруг, вы можете использовать одну символическую ссылку, а не выполнять поиск / замену через свою кодовую базу. Например. если вы переместили '~ / foo' в '~ / downloads / foo', просто сделайте это:
cd ~
ln -s ~/downloads/foo foo
И весь ваш импорт все равно будет работать.