Другой возможный подход, если ни один из двух приведенных ответов не является практичным, заключается в определении интерфейса на уровне импорта. Например:
if project == 'A':
from moduleA import doA as doproject
elif project == 'B':
from moduleB import doB as doproject
# many lines of code
doproject(2)
Эта концепция (хотя и не эта конкретная проблема) является одной из тех вещей, для которых "импорт X как Y" действительно полезен.
Вы также можете стать умнее, построив импорт на основе имени проекта, сделав словарь с ключом для проекта, который имеет значение в качестве вызываемого модуля, и тому подобное. Но я бы не пошел в этом направлении, если бы не был уверен, что рефакторинг, чтобы я мог передать нужные мне модули, не сработал бы.