Другой вариант. Посмотрите, что Python по умолчанию importlib.reload
просто переименует библиотеку, переданную в качестве аргумента. Он не перезагрузит библиотеки, которые импортируют ваш lib. Если вы изменили много файлов и имеете несколько сложный пакет для импорта, вы должны сделать глубокую перезагрузку.
Если вы установили IPython или Jupyter , вы можете использовать функцию для глубокой перезагрузки всех libs:
from IPython.lib.deepreload import reload as dreload
dreload(foo)
Если у вас нет Jupyter, установите его с помощью этой команды в свою оболочку:
pip3 install jupyter
Разница между методами, которые вы описали, заключается в том, что первый метод - это bind mount , а другой - том . Это больше функций Docker (нежели Docker Compose), и есть несколько преимуществ, которые предоставляют тома при монтировании пути из файловой системы вашего хоста. Как описано в документации, они:
docker volumes
или API (в отличие от необработанной файловой системы) [119 ] Другим значительным преимуществом использования томов являются драйверы томов , которые вы указали бы вместо local
. Они позволяют удаленно хранить тома (например, в облаке и т. Д.) Или добавлять другие функции, такие как шифрование. Это является основой концепции контейнеров, потому что если запущенный контейнер не имеет состояния и использует удаленные тома, вы можете перемещать контейнер между узлами, и его можно запускать без перенастройки.
Поэтому рекомендуется использовать тома Docker. Другим хорошим примером является следующий:
services:
webserver_a:
volumes:
- ./serving/prod:/var/www
webserver_b:
volumes:
- ./serving/prod:/var/www
cache_server:
volumes:
- ./serving/prod:/cache_root
Если вы переместите каталог ./serving
куда-нибудь еще, привязка монтирования прекратится, потому что это относительный путь. Как вы заметили, тома имеют псевдонимы и управляют их путем Docker, поэтому:
TL; DR: попробуйте и используйте тома. Они переносимы и поощряют действия, которые уменьшают зависимости от вашего хост-компьютера.