The striker has ended his five-year spell at the Emirates after his contract expired and joins the Ligue 1 side on three-year deal.
A Lyon statement said: "Lacazette's return to the club, having played more than 200 times for Arsenal over the course of five seasons [71 goals] has been the club's priority for many months and he fits in perfectly with the environment and the new strategy that the institution wishes to put into place.
"His second arrival, after the return of Remy Riou and the extension to Maxence Caqueret and Anthony Lopes' contracts shows the great ambition to breathe new life into a new dynamic around the men's professional team."
Lacazette's future had been the centre of speculation for months and the announcement that he is leaving won't come as a surprise. Lacazette said in April that he was in talks with several clubs as the end of his contract neared and hinted that he wanted to join a side who are competing in the Champions League. Arsenal finished fifth last season, outside the Champions League places. Lyon finished in eighth place in Ligue 1.
Lacazette joined Arsenal from Lyon in 2017 and made 206 appearances across all competitions, scoring 71 goals. He was Arsenal's top scorer during the 2017-18 and 2020-21 seasons and is in the club's all-time top 10 Premier League scorers.
During his time with the club, he won the FA Cup and the Community Shield.