Это распространенная ошибка, и на самом деле не существует надежного способа избежать этого.По крайней мере, вы можете убедиться, что все ваши модули живут в пакетах (по крайней мере, один пакет, если это небольшой проект без кода для повторного использования), чтобы вы использовали их как from mypackage import code
вместо import code
(также убедитесь, что вы используете либоабсолютный импорт и т. д.) и что вы всегда запускаете свой код из каталога, содержащего пакет (ы), а не из самого каталога пакета (python вставляет текущий рабочий каталог в первую позицию sys.path
).
Это не предотвратит ВСЕ возможные проблемы с маскировкой имен, но должно минимизировать их.По опыту, когда вы сталкивались с подобными проблемами хотя бы один раз, вы обычно обнаруживаете симптомы очень быстро - наиболее распространенным и совершенно очевидным является то, что какой-то совершенно не связанный модуль stlib или третьей части начинает падать с помощью ImportErrors или AttributeErrors (с«модуль X не имеет атрибута Y»).На этом этапе, если вы только что добавили новый модуль в свой собственный код, скорее всего, это новый модуль, который нарушает все, так что вы можете просто переименовать его (убедитесь, что вы очищаете файлы .pyo / .pyc, если есть) и посмотрите, еслиэто решает проблему.В противном случае проверьте трассировку, чтобы выяснить, какой импорт завершился неудачно, большую часть времени вы обнаружите, что у вас есть модуль или пакет с тем же именем в вашем текущем рабочем каталоге.