Country Level Data Package
Unlocking Global Insights with the Tidycountries R Package - A promising tool
You know that feeling when you hear about a tool for the first time, and people keep saying, “You should really try this!" But for some reason, you just… don’t? That was me with uv
.
I had heard whispers about it—a fast, efficient package manager for Python dependencies. Some said it was a better alternative to poetry
, others praised its virtual environment capabilities. But I never bothered.
Until now.
I finally decided to try uv
for an upcoming project—my first proper Python package. It’s funny how long I waited to build something with the promise of being actually useful. But here we are.
And let me tell you: uv
is fast.
Here’s how I got started.
uv
on WindowsI’m on Windows, so installation meant running this command in PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Once installed, I double-checked just to be sure:
powershell -c "irm https://astral.sh/uv/install.ps1 | more"
Now, with uv
ready to go, it was time to set up my project.
In Python, managing dependencies in isolated environments is crucial. Typically, I’d use venv
or virtualenv
, but uv
does something cool—it automatically activates the virtual environment when you’re inside the project folder.
But first, you need to create it by:
uv venv
No more manually running source .venv/bin/activate
or .\.venv\Scripts\activate
on Windows. It just works.
Still, out of habit, I tried activating it manually:
.\.venv\Scripts\activate
Old habits die hard.
Once inside my environment, the next step was to upgrade some essential tools:
uv pip install --upgrade pip setuptools wheel
Then, I installed cookiecutter
, a fantastic tool for bootstrapping Python packages without reinventing the wheel:
pip install -U cookiecutter
But here’s the kicker—there’s a dedicated Python package template for cookiecutter
. Running the following command set up a clean project structure for me:
cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage.git
This prompts a few questions about the package name, author, license, etc., and within seconds, boom—a fully structured Python package appeared.
uv
For this project, I needed networkx
, pandas
, and rdflib
. With uv
, installing them was as simple as:
uv pip install networkx pandas rdflib
What impressed me was how fast uv
handled the installations. Even better—it automatically updated the pyproject.toml
file with these dependencies. I think pip also does this, so not much to say on this regards.
Apparently, I could have also done this using:
uv add networkx pandas
I’ll need to experiment with this more, but the idea of having a package manager that seamlessly updates dependencies without extra steps? I like that.
To see the list of installed packages and their versions, uv
provides a simple command:
uv python list
Fast, clean, and no clutter—just how I like it.
After writing some initial code, I wanted to install my package locally to test it:
uv pip install -e .
This allowed me to use my package within my environment without needing to publish it.
I only just started using uv
, but I’m already impressed by how smooth and efficient it is. The speed, the automatic environment activation, and the pyproject.toml
management—it’s refreshing.
I plan to dive deeper into uv
and see how it holds up in a full development workflow. There’s always more to learn, and I’m sure I’ll have some thoughts (and rants) along the way.
Until then, happy coding. 🚀