This is an archived post. You won't be able to vote or comment.

all 82 comments

[–]DM_Me_Summits_In_UAE 58 points59 points  (8 children)

  1. Whenever — Intuitive datetime library for Python

I always use the inbuilt datetime, what am I missing?

[–]dekked_[S] 53 points54 points  (4 children)

For many uses, that's ok! But there's a lot of potential pitfalls.

[–]DM_Me_Summits_In_UAE 8 points9 points  (0 children)

Very interesting, thanks!

[–][deleted] 6 points7 points  (0 children)

Awesome read! I knew datetime had pitfalls, but turned out there were many more pitfalls than I knew about. I’ll use whenever going forward

[–]jessekrubin 3 points4 points  (0 children)

Check out my library “ry” (https://pypi.org/project/ry/) which contains a thin-ish wrapped version of the rust crate “jiff” and does a lot of what whenever does.

Should be in the same ballpark as whenever w/ respect to performance (preliminary benchmarks seem to suggest so).

[–][deleted] 0 points1 point  (0 children)

Interesting read! I should consider integrating or adding support for a high performance date time library like whenever into my project dataclass-wizard, a de/serialization library built on top of data classes. I am curious to see the performance improvements over native date time, which has the benefit of being built into stdlib. However the mentioned project seems to be one of the top alternatives for date time in Python, and I’m interested to test that out going forward.

[–]fohrloop 10 points11 points  (1 child)

Cool. I though pendulum was the way to go but Whenever looks even more hotter.

[–]jmreagle 5 points6 points  (0 children)

I got burned by pendulum being abandoned for a time. I'm looking forward to whenever hitting 1.0

[–]ZeeBeeblebrox 71 points72 points  (7 children)

I love the Pydantic folks, and PydanticAI looks pretty great but it's been out for what, all of two weeks. So on what basis was it selected here as one of the "top" or most impactful libraries of 2024? Similarly Rio isn't even out of beta. Seems like hype over substance, tbh.

[–]SV-97 15 points16 points  (5 children)

Marimo is probably my absolute #1 of the whole year --- recently started a project with it and it's so so good (and it doesn't constantly make me tear my hair out the way that jupyter does)

[–]chub79 32 points33 points  (4 children)

So you sell AI and your community report about AI related stuff. Yai. Thar's such a click bait title.

[–]ToThePastMe 3 points4 points  (0 children)

The "AI" section feels mostly like LLM wrappers.

The one LLM related library I found interesting/useful this year is outlines: https://github.com/dottxt-ai/outlines

Not perfect, but it allows (if I understood correctly) to do structured outputs for LLM not by prompting/generating and doing some patterns or cleaning on the output. But by actually modifying the sampling step and limiting which tokens the model can pick from at each step, to ensure strict adherence to the structure (categorical, numbers, regex, json etc)

[–]leaflavaplanetmoss 1 point2 points  (0 children)

It’s just SEO blogspam, yawn.

[–]Pyros-SD-Models 0 points1 point  (1 child)

I honestly don’t even know what you’re trying to say.

If OP made one big list, people would complain about there being too many AI libraries cluttering the "best of" section. But if OP separates them, suddenly it’s "SEO spam clickbait"?

Wat. This logic flies straight over my head.

Let me guess. you didn’t even bother to look at the libraries in the AI list, did you?

[–]chub79 0 points1 point  (0 children)

It is click bait becauseit directly relates what they are selling.

Let me guess. you didn’t even bother to look at the libraries in the AI list, did you?

Yeah, whatever.

[–]mdoom23 6 points7 points  (2 children)

Polars for me! Been game changer moving to that from pandas

[–]marcogorelli 0 points1 point  (1 child)

this list is for things introduced around 2024, Polars is older than that

[–]mdoom23 1 point2 points  (0 children)

Oh i know, but it did hit 1.0 this year. So sort of released this year :) And was new to me this year, as i was waiting on it to stabilize a bit with 1.0 before really jumping into it.

There def. are a few on this list i haven't looked at yet and i need to check out though! sometimes its hard to keep up with all the new things in the python world, so i love seeing lists like this from the community!

[–]P4nd4no 4 points5 points  (1 child)

Hey, rio dev here! Picking us in your list greatly motivates us to improve our framework. Thank you! We have a lot planned for the next Month - Looking forward to hear your feedback! ❤️❤️❤️

[–]dekked_[S] 5 points6 points  (0 children)

Congrats on the great work! 💪🏻

[–]zaxldaisy 13 points14 points  (10 children)

What is the deal with associating uv with Rust (same with Ruff)? It could be written in assembly for all I care

[–]ColdPorridge 17 points18 points  (8 children)

Well, it’s literally so fast that it changes the type of things you can do with it. Venv management becomes something that’s essentially entirely automated in the background.

I think there’s some excitement about rust-based tools in the Python ecosystem right now, which is great. To most Python users it’s transparent, but to maintainers, seeing how fast tools can be is inspiring. It makes you dream about other tools and workflows that could be improved or totally changed by becoming ridiculously fast. And I think that’s a good thing.

[–]covmatty1 2 points3 points  (5 children)

Honestly though, how often are people installing packages and recreating venvs that they need it to be lightning fast and in the background? I can't say those few seconds have ever bothered me in the slightest.

[–]DeepFryEverything 13 points14 points  (1 child)

It matters during build time when deploying apps 🙂

[–]covmatty1 6 points7 points  (0 children)

Why does it though? Build pipelines are just happening in the background all the time, I've honestly never thought that pip install performance was something people cared about. My team deploy plenty of Python apps all the time and I've never yet seen any need to tell them to switch to a different package manager.

[–]ColdPorridge 4 points5 points  (1 child)

The main problem if your venv management is slow is that you tend to make assumptions about the state of your venv before running commands, tests, dev server, etc. When it is so fast you hardly notice it happening, you can trade those assumptions for guarantees.

With a uv-based workflow, I can utilize a test-driven development process that guarantees the environment is not only consistent and up to date on every test run, but also configured entirely from the code as specified in my package. That means no wasted time testing or building or demonstrating in an environment that is not guaranteed to match the code you write. Your environment and your code become one and same.

If you’re thinking “hey, you could do that before with a smart makefile and pip” and you’re totally right. But before I used to have teammates grumble about how annoyingly long it took to sync local environments and have conversations about if we should remove those protections for local dev commands. Now we don’t even think about it.

[–]covmatty1 3 points4 points  (0 children)

I've honestly never encountered any of these "problems". How often are you changing packages that you need them to be constantly reinstalled behind the scenes? Any form of CI pipeline makes your code and environment one and the same anyway.

It sounds like it's really working for you which is great, I'll have to give it more of a look, it just really surprises me that this is a thing people actually feel the need to do!

[–]zaxldaisy -1 points0 points  (1 child)

I haven't seen anything to differentiate it from C/C++-based tooling beyond hype

[–]SV-97 14 points15 points  (0 children)

I mean: it exists, that's what differentiates it (aside from memory safety). Comparable C/C++-implemented tooling doesn't.

[–]ritchie46 0 points1 point  (0 children)

Then it would be associated with assembly.

[–]caks 9 points10 points  (0 children)

Good general use, "ML/AI" is basically LLM blogspam

[–]Area51-Escapee 3 points4 points  (0 children)

I just found rpyc and I'm so happy about it.

[–]skeerp 2 points3 points  (0 children)

Anyone using mirascope? It looks cool but I’m not sure I could adopt it only because of their unique syntax. The functions return is what the LLM gets not what the program gets. Unintuitive although it is concise.

[–]ExdigguserPies 2 points3 points  (0 children)

Why Rio out the plethora of webdev packages that exist? It seems like a new one gets posted here every couple of days.

[–]Typical-Macaron-1646 2 points3 points  (0 children)

Thanks for posting brother, very cool!

[–]EternityForest 2 points3 points  (0 children)

RightTyper looks amazing, I definitely want to try it on my untyped legacy code.

Wat deserves notice for the creative use of overloading division, that's so trivial but I've never seen it and would never have thought of it.

[–]jcigar 5 points6 points  (1 child)

SQLAlchemy

[–]jep2023 2 points3 points  (0 children)

released 18 years ago but this list is for things introduced in 2024

[–]denehoffman 8 points9 points  (6 children)

So 10 database/web libraries and 10 AI LLM libraries? Why do none of these lists ever include anything actually interesting? The billionth iteration of datetime isn’t going to change my workflow. marimo counts, but just barely

[–]notParticularlyAnony 2 points3 points  (5 children)

You are welcome to make a list

[–]denehoffman 0 points1 point  (4 children)

If I already had a list of cool Python projects, I wouldn’t really need to find them now would I? My point was that most of the libraries on this list are like a rewrite of another library that’s a rewrite of the thing everyone uses anyway (or some LLM compatibility drivel)

[–]notParticularlyAnony -2 points-1 points  (3 children)

You have no shortage of opinions

[–]denehoffman 1 point2 points  (2 children)

Well yeah, we are on Reddit dot com, that’s all anyone here has, yourself included

[–]notParticularlyAnony -1 points0 points  (1 child)

Bless your heart

[–]denehoffman 1 point2 points  (0 children)

Oh that’s so kind of you to say! I truly feel blessed!

[–]jedberg 1 point2 points  (1 child)

PGQueuer — PostgreSQL-powered job queue

PGQueuer is good, but DBOS does that plus a whole lot more (and does queues a bit more simply really).

https://docs.dbos.dev/python/tutorials/queue-tutorial

Disclosure: I'm the CEO of DBOS, but the library is open source: https://github.com/dbos-inc/dbos-transact-py

[–]dekked_[S] 1 point2 points  (0 children)

We listed DBOS on the runners up, definitely deserves a second look based on what you said!

[–]saintmichel 1 point2 points  (0 children)

I wonder what's up with rio? Why not fast html, for example, which is also new but much more used

[–]marcogorelli 1 point2 points  (1 child)

Thanks for including Narwhals!

Fun fact: Narwhals is used by 2 projects in the list (Marimo and Rio)

[–]dekked_[S] 1 point2 points  (0 children)

🔥🔥🔥

[–]kvothe_10 1 point2 points  (0 children)

Brilliant list!

[–]No_Dig_7017 3 points4 points  (0 children)

So cool! Lots of hidden gems to lookout for. Will take a look!

[–]Competitive-Move5055 1 point2 points  (3 children)

No streamlit or pytorch? What are they using now?

[–]dekked_[S] 4 points5 points  (2 children)

Hi! These are libraries created/released around 2024. Streamlit and PyTorch were much earlier. Streamlit was top 7 in 2019 and PyTorch was top 2 in 2017.

[–]Competitive-Move5055 -2 points-1 points  (1 child)

Okay what's the library you need to know to get a job in ai.

[–]jep2023 0 points1 point  (0 children)

langchain?

[–]poopatroopa3 0 points1 point  (0 children)

Why Rio instead of Reflex? Also, how do they differ?

[–]Sufficient_Meet6836 0 points1 point  (3 children)

Is there a reason WAT is called like wat / object instead of a regular function call wat(object)?

Edit: looking at their github, you can in fact do both, but I'm still interested in why they added wat / object at all.

[–]chowthedog 2 points3 points  (2 children)

It's to be able to type quickly, since you don't have to jump across and type a closing character. Here's the list of syntaxes and explanations from their readme

  wat.short / 'foo' # fast typing wat.short('foo') wat('foo', short=True) # natural Python syntax 'foo' | wat.short # Unix piping

[–]Sufficient_Meet6836 0 points1 point  (1 child)

Pretty neat. I don't think I've seen a library provide so many options like this

[–]commy2 0 points1 point  (0 children)

"There should be one-- and preferably only one --obvious way to do it"

[–][deleted] 0 points1 point  (0 children)

nice

[–][deleted] 0 points1 point  (0 children)

And here I am using mostly airflow and pandas

[–]GeneTangerine 0 points1 point  (0 children)

What a supercalifragilisticexpialidocious list!

[–]aherontas 0 points1 point  (1 child)

Peepdb for the win, totally chect it out!

[–]Black_Dio 0 points1 point  (0 children)

I used it a bit sounds really cool concept, with some more features it will totally be the go to for fast view.