Laurent Blanc's side were below-par all evening but still boast a 10-point lead at the top of Ligue 1 following Sunday's lossLyon condemned Paris Saint-Germain to their second defeat inside a week thanks to Jordan Ferri's 31st minute strike.
Laurent Blanc's men were eliminated from the Champions League on Tuesday, losing on away goals to Chelsea in the quarter-finals, and they delivered another below-par performance on Sunday.
The Stade de Gerland had been the scene of last year's title triumph for the visitors but their march to this year's championship suffered a blip, as Lyon claimed a deserved victory.
With it, Remi Garde's side also gained a psychological advantage in what was effectively a dress rehearsal for the Coupe de la Ligue final next Saturday.
Lyon midfielder Ferri scored the only of the game in spectacular fashion after 31 minutes, netting for the fifth time this season in all competitions with a magnificent long-range effort to end PSG's 16-game league unbeaten run.
Despite the reverse, Blanc's side still lead the top flight by 10 points and can retain their crown with a win over Evian a week on Wednesday, providing that Monaco lose to Nice next Sunday.
Midfielder Yohan Cabaye was called into the PSG starting XI as Blanc made four changes from the defeat to Chelsea, while injury-hit Lyon were still without star midfielders Clement Grenier and Yoann Gourcuff.
PSG made a fast start and would have taken the lead inside two minutes had Lyon goalkeeper Anthony Lopes not tipped Edinson Cavani's close-range header onto the near post.
Six minutes later the visitors cut through the Lyon defence again. Cavani latched onto a through ball from Blaise Matuidi before rolling the ball to Lucas Digne to slot home into an empty net, only for the goal to be disallowed for offside.
Lyon responded almost instantly as striker Bafetimbi Gomis outmuscled Digne in the box, however, the former Saint-Etienne man could only turn his shot into the side-netting.
But just after the half-hour mark Lyon did take a surprise lead, as Ferri capitalised on a loose pass from Ezequiel Lavezzi to curl a shot brilliantly into the bottom corner.
The visitors struggled to find a way back into the game from there, although Cabaye flashed a volley narrowly wide of the post just before half-time.
There was little change in the second half as PSG - once again minus the talents of injured top scorer Zlatan Ibrahimovic - struggled to create much in the final third against a determined Lyon defence.
Digne did draw a strong save from Lopes with bending effort from the edge of the area, with Lavezzi's follow up correctly ruled out for offside.
Lyon continued to carry the greater threat and they went close to a second as Jimmy Briand glanced a header wide from a right-wing cross by Ferri, who then forced PSG goalkeeper Salvatore Sirigu to palm the ball over the crossbar with a vicious volley from range.
And PSG's frustration was summed up soon afterwards when Lavezzi wasted arguably their best chance to level, shooting into the side-netting from six yards late on.