I'm curious if that's actually true - my actual experience is that it actually suffers horribly in large projects because as the size and complexity goes up it's just harder and harder for its heuristics to not produce false positive typing errors. It worked great on a small library where it could see the whole source and everything was well annotated ... but that's sort of the context where it is least needed in the first place ...
And my particular experience with it is very positive, even if my project that is using it is still small (it is getting bigger though, and mypy is really helping me to refactor it when I needed).
Most of the "false positives" that mypy reports to me end up being code that is overly cleverly, and rewriting it to make mypy happy also improves the code quality.
[1]: https://developers.facebook.com/videos/f8-2018/type-checked-...
[2]: https://blogs.dropbox.com/tech/2019/09/our-journey-to-type-c...
And environment... It is complicated. It is not that it is that bad, however it sure lacks some polish. The solution is not easy either since even if you solved the problem today (like using poetry), there is still the whole backwards compatibility problem.
There is various hacks to make things easier, however in the end the problem is still more complicated than it should.