Southampton made a right start and controlled the pace of play, but a quick counter attack from City led to a Kevin De Bruyne tap-in goal in the 15th minute.
James Ward-Prowse took advantage of an error Aymeric Laporte, who gave away a penalty for a foul on Jannik Vestergaard, and the midfielder calmly made it 1-1 from the spot.
But Che Adams gifted Riyad Mahrez a chance on goal with a careless pass from inside his own half, which made it 2-1 to City.
Ilkay Gundogan doubled City’s lead on the stroke of half-time, with Saints having looked set to head into the break only down a goal.
Mahrez scored a spectacular goal from a bit of individual effort to give City a 4-1 lead, before Adams responded to draw Saints back within two.
But De Bryune made it a comprehensive scoreline, adding his second goal on the hour mark.
Saints made six changes to the side that beat Sheffield at the weekend, including resting Takumi Minamino and Kyle Walker-Peters.
Southampton has an upcoming run of fixtures that includes Brighton on Sunday, followed by Burnley, West Brom and Crystal Palace.
Manchester City (4-3-3): Ederson; Zinchenko (Mendy 81), Laporte, Dias, Walker; Gundogan, Fernandinho, De Bruyne (Aguero 72); Foden, Silva, Mahrez (Torres 61)
Unused subs: Steffen (GK) Sterling, Stones, Cancelo, Jesus, Rodri
Goals: De Bryune (15, 59), Mahrez (40, 55), Gundogan (45+3)
Bookings: Fernandinho (83)
Southampton (4-2-2): McCarthy; Salisu, Vestergaard, Bednarek, Bertrand; Djenepo (Tella 46), Stephens (Diallo 63), Ward-Prowse, Armstrong (Watts 72); Redmond, Adams
Unused subs: Forster (GK), Diallo, Minamino, Walker-Peters, N’Lundulu, Ferry, Ramsay
Goals: Ward-Prowse (25 PEN), Adams (56)