Ask HN: Python developers at big companies what is your setup?
34 points| ravshan | 7 months ago
People recommend their favorite tool, but when you look into it, it is barely supported or already abandoned.
I will focus on working with LLMs.
Edit: By tools I meant everything related to python development starting from python version, package manager, environment manager, IDE and ending with deployment tools
Tpt|7 months ago
papanoah|7 months ago
- uv (went from pipenv to poetry to uv), which was the right decision imo.
- ruff (replaced black)
- PyCharm, but some people use vscode or neovim.
- mypy for type checking, which I am not 100% happy with. One experienced developer swears by mypy, thats the reason we haven't explored alternatives.
- 'just' as task runner
pdzly|7 months ago
ehutch79|7 months ago
Ruff is my goto for linting and formatting. replacing black, isort, flake8, etc.
There's lsps for both, so you can use them in vscode or wherever you're doing your editing.
eljey|7 months ago
- poetry for dependency management
- black for formatting
- flake for linting (you can use ruff now)
- PyCharm as IDE
- pyenv for python version management -> but I switched to devbox a year ago and never go back
- docker as end artifact
- deployed to kubernetes (at the end k3s) with ansible and terraform
viraptor|7 months ago
With that out of the way: mise for managing versions of all the runtimes (asdf is fine too), uv for packages (previously poetry which is ok), mypy type checking for things I make. Otherwise I switch between projects a lot so just use whatever the projects use by default.
Deployment tools aren't really language specific (when they are they're rarely good). The editing, it's just Cursor, although I did like the jetbrains IDE previously.
But overall - just give things a go. It's usually quite easy to swap those tools as needed.
sjducb|7 months ago
Packages managed with pip and versions pinned with pipcompile. One ML production environment forces us to use conda we inherit from the pip environment and try to have as much done by pip as possible.
Formatted with black and flake8
Unit tests with unittest
Azure Dev Ops for running tests, security screening, and CI
The happy path for deployment is build docker images in AzureDevOps unfortunately we can’t do that for good reasons
I’m not a fan of typed Python, it doesn’t work as smoothly as you expect if you’re coming from a statically typed language.
Be careful enforcing pylint quality. It can be a great way to kill your teams velocity.
I’m describing a boring stack that works. All of these tools are 5+ years old and very well supported.
pimbrouwers|7 months ago
msgodel|7 months ago
I think language servers and autocomplete are much more useful for .net (I used to do a lot of C# as a freelancer in college) than they are for python. Personally I just open a REPL and tab around in that if I need it but I do that maybe once a month. Most software is well organized such that you can keep enough of the theory in your head for the default nvim config to work easily. A small FITM model with a ring context like Qwen can help a bit with boilerplate if you really want autocomplete.
Python just isn't that verbose.
kingkongjaffa|7 months ago
dragonwriter|7 months ago
If I had my choice, I'd switch environment and package management to uv.
runjake|7 months ago
- ruff for linting and all the other stuff it does.
- mypy for type hint checking
- VS Code (although I'm playing with zed.dev too)
kermatt|7 months ago
al_borland|7 months ago
msgodel|7 months ago
I only use it for local models and don't have any hosted ones that I'm willing to pay for so YMMV.
lordkrandel|7 months ago
foobarbaz33|7 months ago
Find defs and refs. Master a little bit of regex and you will reduce false positives.
Grep serves as a rudimentary autocomplete. find the definition, open in a buffer, observe fields. This is analogous to an autocomplete popup displayed inline. The buffer can now power your contextual completions, similar to an inline popup.
kingkongjaffa|7 months ago
Can you use a dev container with a dockerfile and use UV for package management, ruff for formatting and lint, mypy for type hint checking, and pytest.
And put all of that on your CI as well so if they fail you don’t merge failing code.
neilsimp1|7 months ago
That said, Neovim + basedpyright + pipenv works well for me.
A lot of people here are using uv and pyenv. Can anyone hint at why I might want to switch?
cpach|7 months ago
ravshan|7 months ago
dapperdrake|7 months ago
And when a new enterprise tool is purchased it may or may not change.
(I only believed it once it was lived through.)
ravshan|7 months ago
cwmoore|7 months ago
ravshan|7 months ago
world2vec|7 months ago
bravesoul2|7 months ago
wizzerking|7 months ago
JonathanRaines|7 months ago
vcarrico|7 months ago
* poetry for package manager
* vscode + copilot
finamoremcc|7 months ago
[deleted]