Lyon looked destined to secure a point thanks to Mathieu Valbuena's equaliser at the start of the host's marvellous second-half display, but Cavani shattered its hopes nine minutes from the end to continue his brilliant season in France and take PSG to within a point of pacesetter Nice.
PSG made light work of Lyon at times in the first half, dominating throughout and deservedly taking the lead through Cavani's penalty in the 30th minute.
But PSG, which saw numerous first-half chances wasted, was made to rue its prolificacy just after the break, as Valbuena levelled with his first Ligue 1 goal since October 2015 just after coming off the bench, a goal that spurred Lyon on to exert some control of its own.
Hatem Ben Arfa, making his first league start since 9 September, had no impact against his former side and as the second period progressed Bruno Genesio's men only became more threatening, giving PSG no end of problems.
Cavani rounded off a rapid break towards the end with his 13th league goal in 12 matches to secure the win, making the most of Nice's stalemate with Bastia earlier in the day.
PSG gradually became the dominant force and was adamant that it should have been awarded a penalty in the 23rd minute, but referee Ruddy Buquet dismissed its protests after Lucas Moura appeared to be nudged over by Jeremy Morel.
Lucas was at the centre of things again shortly after, but his attempt to meet Serge Aurier's low cross with a flicked finish backfired, as he knocked the ball on to his other leg with the goal at his mercy.
The visiting team was ahead after half an hour, though.
Rafael clumsily hacked Thiago Motta to the ground while attempting to clear his lines to concede a penalty and Cavani converted the spot-kick.
Lucas should have added a second a few moments later, only for the Brazilian to fire wide of the left-hand post when played into the right side of the area.
Clearly unimpressed with his team's efforts in the first half, Genesio replaced Maciej Rybus with Valbuena and he made an instant impact, slamming home a left-footed half-volley from 12 yards after Rafael's lovely curling strike came back off the left-hand post.
Lyon almost went ahead a few moments later, but Alexandre Lacazette stabbed just wide of the near post after meeting Morel's low cross.
The host's improvement was significant as it carved PSG open at will and Rachid Ghezzal should have scored a second just after the hour mark, but his touch allowed Alphonse Areola to pounce on the ball when played into the box by Lacazette.
PSG took full advantage of Lyon's inability to convert its chances, as substitute Thomas Meunier provided a fine cross at the end of a swift counter-attack and Cavani bundled in from close range to sink its host.