![Community banner](https://programming.dev/pictrs/image/644d1bd4-dfc1-4a39-b667-6d7c8f353b5b.jpeg)
![python](https://programming.dev/pictrs/image/1d99f7cb-50e7-4994-94c4-fd23f30209b7.png?format=webp&thumbnail=48)
Python
- Welcome to c/Python!
Welcome to c/Python, the go to place to discuss Python tools, techniques, and news.
We're just getting started, so please use this thread to suggest what this community should look like, what it should cover, and how it should operate.
- New Pythörhead release v0.25.2github.com Release v0.25.2 · db0/pythorhead
Version 0.25.2 What's Changed support python 3.12 by @stenius in #101 New Contributors @stenius made their first contribution in #101 Full Changelog: v0.25.1...v0.25.2
- best way to access databases in different projects
Hi, I want to know what is the best way to keep the databases I use in different projects? I use a lot of CSVs that I need to prepare every time I'm working with them (I just copy paste the code from other projects) but would like to make some module that I can import and it have all the processes of the databases for example for this database I usually do columns = [(configuration of, my columns)], names = [names], dates = [list of columns dates], dtypes ={column: type},
then database_1 = pd.read_fwf(**kwargs), database_2 = pd.read_fwf(**kwargs), database_3 = pd.read_fwf(**kwargs)...
Then database = pd.concat([database_1...])
But I would like to have a module that I could import and have all my databases and configuration of ETL in it so I could just do something like 'database = my_module.dabase' to import the database, without all that process everytime.
Thanks for any help.
- Open-Source, Language-Agnostic Mutation Testing Tool Using LLM Agentsgithub.com GitHub - codeintegrity-ai/mutahunter: Open Source Language Agnostic LLM-based mutation testing tool
Open Source Language Agnostic LLM-based mutation testing tool - codeintegrity-ai/mutahunter
Check out our open-source, language-agnostic mutation testing tool using LLM agents here: https://github.com/codeintegrity-ai/mutahunter
Mutation testing is a way to verify the effectiveness of your test cases. It involves creating small changes, or “mutants,” in the code and checking if the test cases can catch these changes. Unlike line coverage, which only tells you how much of the code has been executed, mutation testing tells you how well it’s been tested. We all know line coverage is BS.
That’s where Mutahunter comes in. We leverage LLM models to inject context-aware faults into your codebase. As the first AI-based mutation testing tool, Mutahunter surpasses traditional “dumb” AST-based methods. Our AI-driven approach provides a full contextual understanding of the entire codebase, enabling it to identify and inject mutations that closely resemble real vulnerabilities. This ensures comprehensive and effective testing, significantly enhancing software security and quality.
We’ve added examples for JavaScript, Python, and Go (see /examples). It can theoretically work with any programming language that provides a coverage report in Cobertura XML format (more supported soon) and has a language grammar available in TreeSitter.
Check it out and let us know what you think! We’re excited to get feedback from the community and help developers everywhere improve their code quality.
- Why can't I append to list inside of a list comprehension?
I'm new to programming a bit, and am learning python so I can learn flask, using the python crash course book. I was learning about list comprehension but it briefly talks about it. If I do
list[list.append(value) for value in range(1, 20)]
it doesn't work. Would this be some sort of recursive expression that is not possible?
- ISO-8859-x encodings and invalid bytes
Hi,
I have to interface with systems that use iso-8859-x encoding (not by choice...), and I'm surprised that the following doesn't throw an error:
python >>> str(bytes(range(256)), encoding="iso-8859-1", errors="strict") '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0¡¢£¤¥¦§¨©ª«¬\xad®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
Bytes in the 0x80—0x9f range are not valid iso-8859-1, and I was expecting the above to raise a DecodeError of some sort; instead it looks like those are passed through.
I'm perfectly happy with this behaviour, I would like to make sure I can depend on it. Can I take an arbitrary byte buffer, decode as ISO-8859-1, and never get any error? Is it guaranteed to be lossless ?
- vlc.py -- setting the time in a song sets the song stuttering and it doesn't really recover
This happens if I use
set_time
orset_position
. Is this typical, or am I just not doing it right?This is on a Pi Zero 2 W, so not the most powerful, but should be able to handle this.
These are the relevant bits of how I'm setting up the player:
``` self._vlc = vlc.Instance() self._player = self._vlc.media_player_new() self._list_player = self._vlc.media_list_player_new() self._list_player.set_media_player(self._player)
playlist = self._vlc.media_list_new() for index in self._play_order: playlist.add_media(self._vlc.media_new_path(self._songs[index]))
self._list_player.stop() self._list_player.set_media_list(playlist) self._list_player.play() ```
And trying to seek is just this:
self._player.set_time(_s_to_ms(seconds))
Any ideas would be greatly appreciated!
- Recommended way to run my scripts from a venv?
So, I have a python script I'd like to run from time to time from the CLI (on Linux) that resides inside a venv. What's the recommended/intended way to do this? Write a wrapper shell script and put it inside a $PATH-accessible directory that activates the virtual environment, runs the python script and deactivates the venv again? This seems a bit convoluted, but I can't think of a better way.
- Rounding Numbers in Python – Real Pythonrealpython.com Rounding Numbers in Python – Real Python
In this video course, you'll learn about the mistakes you might make when rounding numbers and how to best manage or avoid them. It's a great place to start for the early to intermediate Python developer who's interested in using Python for finance, data science, or scientific computing.
Via https://fosstodon.org/@realpython/112637986952324365
- NumPy 2.0.0 releasedgithub.com Release v2.0.0 · numpy/numpy
NumPy 2.0.0 Release Notes NumPy 2.0.0 is the first major release since 2006. It is the result of 11 months of development since the last feature release and is the work of 212 contributors spread o...
- Why Python Is So Slow (And What Is Being Done About It)thenewstack.io Why Python Is So Slow (And What Is Being Done About It)
PyCon 2024 showcased a number of ways to speed the pokey Python programming language including sub-interpreters, immortal objects, just-in-time compilation and more.
- Can I get some feedback / review on my code?
I started working through the 100 Days of Code course of Udemy last February, and I'm in the home stretch. I'm on the final lessons, which are really just prompts for projects. No hand holding, just a brief description of the goal. I recently finished a tkinter GUI program, the goal of which was to enable adding text watermarks.
I took a few liberties--mainly, I made it possible to layer a png on top of the background. It was a really fun project and quickly grew more complicated than I expected it to. I got some hands on experience with the Single Responsibility Principle, as I started off doing everything in my Layout class.
Eventually, I moved all the stuff that actually involved manipulating the Image objects to an ImageManager class. I feel like I could have gotten even more granular. That's one thing I would love to get some feedback on. How would a more experienced programmer have architected this program?
Anyway, I guess this preamble is long enough. I'm going to leave a link to the repository here. I would have so much appreciation for anyone who took the time to look at the code, or even clone the repo and see if my instructions for getting it to run on your machine work.
- Could someone help me understand the input() function?
I'm currently learning Python and am learning about very basic functions such as
int()
,float()
, andinput()
.I have the first two down pat, but I'm struggling to understand the last. The example I'm looking at is found at 12:26 of this video:
nam = input('Who are you? ') print('Welcome', nam)
Who are you? Chuck Welcome Chuck
In this case, wouldn't
nam
be a variable equal to the text on the right side of the=
sign?In which case, if
nam
is equal toinput('Who are you? ')
, then wouldn'tprint('Welcome', nam)
just result inWelcome input(Who are you? )
?Obviously not (nor does it work in a compiler), which leads me to believe I'm clearly misunderstanding something. But I've rewatched that section of the video several times, and looked it up elsewhere on the web, and I just can't wrap my head around it.
Could someone help me with this?
Thanks.
- What Am I Doing Wrong?
If I run this ``` #!/bin/bash
ARCH=$(python fetch_architecture.py) if [ $ARCH == "aarch64" -o $ARCH == "armv71" ] ; then export PATH=/opt/local/llvm/bin:${PATH} cd /app RUSTFLAGS="-C linker=lld" wasm-pack build --target web --release plume-front else wasm-pack build --target web --release plume-front fi
via the terminal, it works just fine. But when I run it via the Dockerfile,
COPY . . RUN cargo install wasm-pack RUN chmod a+x ./script/plume-front.sh RUN sleep 1 RUN ./script/plume-front.sh ``` It sayspython: command not found
and then[: too many arguments
- What Git library to choose?
I happen to write a lot of python code dealing with git repositories. Currently I am calling the
git
command line tool from python and interpret the output.This solution really doesn't scale well. Can you recommend a python library that wraps git functionality?
I have found three:
- GitPython: Seems to work well, but it is in maintenance mode, unlikely to be improved. It also does not have any type hints making working with it annoying.
- pygit2: Seems well supported and has type hints. But it also seems very low level and pretty tedious to use.
- dulwich: Looks very promising feature wise but I'm unsure how well it is supported. It seems like an ambitious project being largely done by just one person.
- Replacing pyinstaller with 100 lines of codetushar.lol Replacing pyinstaller with 100 lines of code
A tale of how I accidentally stumbled upon some interesting tech over time.
- Setting up Python on Windowsdev.to Setting up Python on Windows
There are many ways to set up Python on Windows—too many ways. According to the Zen of...
- Python beginner
Good evening, everyone. I have, but one quick inquiry. What are the best resources in your opinion to learn python by yourself as a complete beginner? Thank you all
- [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)
Solved: Thanks to a user with this reply: https://programming.dev/comment/10034690
---
cross-posted from: https://beehaw.org/post/13901165
> Hi all. I have a little problem and don't know how to solve. A CLI program in Python is broken since Python 3.12. It was working in Python 3.11. The reason is, that Python 3.12 changed how subclassing of a pathlib.Path works (basically fixed an issue), which now breaks a workaround. > > #### The class in question is: > >
python > class File(PosixPath): > def __new__(cls, *args: Any, **kwargs: Any) -> Any: > return cls._from_parts(args).expanduser().resolve() # type: ignore > > def __init__(self, source: str | Path, *args: Any) -> None: > super().__init__() > self.__source = Path(source) > > @property > def source(self) -> Path: > return self.__source > > @property > def modified(self) -> Time: > return Time.fromtimestamp(os.path.getmtime(self)) > > @property > def changed(self) -> Time: > return Time.fromtimestamp(os.path.getctime(self)) > > @property > def accessed(self) -> Time: > return Time.fromtimestamp(os.path.getatime(self)) > > # Calculate sha512 hash of self file and compare result to the > # checksum found in given file. Return True if identical. > def verify_sha512(self, file: File, buffer_size: int = 4096) -> bool: > compare_hash: str = file.read_text().split(" ")[0] > self_hash: str = "" > self_checksum = hashlib.sha512() > with open(self.as_posix(), "rb") as f: > for chunk in iter(lambda: f.read(buffer_size), b""): > self_checksum.update(chunk) > self_hash = self_checksum.hexdigest() > return self_hash == compare_hash >
> > #### and I get this error when running the script: > >> Traceback (most recent call last): > File "/home/tuncay/.local/bin/geprotondl", line 1415, in > sys.exit(main()) > ^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1334, in main > arguments, status = parse_arguments(argv) > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments > default, status = default_install_dir() > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir > steam_root: File = File(path) > ^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ > return cls._from_parts(args).expanduser().resolve() # type: ignore > ^^^^^^^^^^^^^^^ > AttributeError: type object 'File' has no attribute '_from_parts'. Did you mean: '_load_parts'? >
> > #### Now replacing_from_parts
with_load_parts
does not work either and I get this message in that case: > >> Traceback (most recent call last): > File "/home/tuncay/.local/bin/geprotondl", line 1415, in > sys.exit(main()) > ^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1334, in main > arguments, status = parse_arguments(argv) > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments > default, status = default_install_dir() > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir > steam_root: File = File(path) > ^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ > return cls._load_parts(args).expanduser().resolve() # type: ignore > ^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib/python3.12/pathlib.py", line 408, in _load_parts > paths = self._raw_paths > ^^^^^^^^^^^^^^^ > AttributeError: 'tuple' object has no attribute '_raw_paths' >
> > #### I have searched the web and don't understand how to fix this. Has anyone an idea what to do? - Python Big O: the time complexities of different data structures in Pythonwww.pythonmorsels.com Python Big O: the time complexities of different data structures in Python
The time complexity of common operations on Python's many data structures.
Trey Hunner writes:
> This article is primarily meant to act as a Python time complexity cheat sheet for those who already understand what time complexity is and how the time complexity of an operation might affect your code. For a more thorough explanation of time complexity see Ned Batchelder's article/talk on this subject.
Read Python Big O: the time complexities of different data structures in Python
- How Python Asyncio Works: Recreating it from Scratchjacobpadilla.com How Python Asyncio Works: Recreating it from Scratch
Learn how asyncio works by recreating it from scratch with Python generators and using the __await__ under method for the async/await keywords.
- RPi 0W - How to stop long-running action
I have a Keybow MINI hooked up to a Raspberry Pi Zero W, and I'm using Python to respond to events. I have one button that kicks off playing a song on a passive buzzer, and I'm wondering if there's a way to have a button press stop the song before it completes.
- Autorun | Autostart | Run at startup
Many commertial apps have options to run apps at logins... Is there any cross-platform way to do so in python?
- A Guide to Python Lambda Functionsadamj.eu A Guide to Python Lambda Functions - Adam Johnson
In Python, Lambda functions are rare compared to “normal” functions, and occasionally misunderstood or overused.
- A library for creating fully typed declarative API clients quickly and easilygithub.com GitHub - martinn/quickapiclient: A library for creating fully typed declarative API clients quickly and easily.
A library for creating fully typed declarative API clients quickly and easily. - martinn/quickapiclient
Would love to hear any suggestions, feedback or comments.
- Announcing py2wasm: A Python to Wasm compilerwasmer.io Announcing py2wasm: A Python to Wasm compiler · Blog · Wasmer
py2wasm converts your Python programs to WebAssembly, running them at 3x faster speeds
- Pyright can check exhaustiveness of match statements on unions
Twitter user @DanyX23:
TIL: pyright, the python type checking engine that is used by VS Code, has support for exhaustiveness checking for match statements with union types!
If you add the following to your pyproject.toml, you'll get the attached warning
[tool.pyright] reportMatchNotExhaustive = true
- Python Tutorials by Socratica | YouTube Playlist
Not sure if this is allowed here, and it's not my playlist, but I thought I'd post these tutorials since I've found them helpful for learning the basics.
- Why won't my Python unit tests run? [SOLVED]
Hello! I'm attempting to follow some tutorials on unit testing with Python. One of them is a video tutorial Unit Tests in Python on the Socratica channel. Everyone in the comments seems to be making out just fine, and I’m following the instructor’s directions to the letter, yet I get a different result. It’s driving me mad lol.
In the video, the instructor creates two text files, one called
circles.py
in which she defines a functioncircle_area(r)
, and another calledtest_circles.py
in which she writes some unit tests. In my attempt to follow along, I've ended up with two files structured like so:/home/yo_scottie_oh/Projects/PythonTutorials/Socratica/Circles ├── circles.py └── test_circles.py
circles.py
:``` from math import pi
def circle_area(r): return pi*(r**2)
Test function
radii = [2, 0, -3, 2 + 5j, True, "radius"] message = "Area of circles with r = {radius} is {area}."
for r in radii: A = circle_area(r) print(message.format(radius=r,area=A)) ```
test_circles.py
:``` import unittest from circles import circle_area from math import pi
class TestCircleArea(unittest.TestCase): def test_area(self): # Test areas when radius >=0 self.assertAlmostEqual(circle_area(1),pi) self.assertAlmostEqual(circle_area(0),0) self.assertAlmostEqual(circle_area(2.1),pi*2.1**2) ```
Where I'm getting tripped up is at 4:32 in the video, the instructor says to run the unit tests by opening a shell, going to the directory that contains both the circles and test_circles modules, and issuing the following command:
python -m unittest test_circles
.Instructor's result (it runs the unit test):
``` Ran 1 test in 0.000s
OK ```
My result (it seems to execute
circles.py
itself):[yo_scottie_oh@nobara Circles]$ python -m unittest test_circles Area of circles with r = 2 is 12.566370614359172. Area of circles with r = 0 is 0.0. Area of circles with r = -3 is 28.274333882308138. Area of circles with r = (2+5j) is (-65.97344572538566+62.83185307179586j). Area of circles with r = True is 3.141592653589793. Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/lib64/python3.11/unittest/__main__.py", line 18, in <module> main(module=None) File "/usr/lib64/python3.11/unittest/main.py", line 101, in __init__ self.parseArgs(argv) File "/usr/lib64/python3.11/unittest/main.py", line 150, in parseArgs self.createTests() File "/usr/lib64/python3.11/unittest/main.py", line 161, in createTests self.test = self.testLoader.loadTestsFromNames(self.testNames, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/unittest/loader.py", line 232, in loadTestsFromNames suites = [self.loadTestsFromName(name, module) for name in names] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/unittest/loader.py", line 232, in <listcomp> suites = [self.loadTestsFromName(name, module) for name in names] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/unittest/loader.py", line 162, in loadTestsFromName module = __import__(module_name) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/yo_scottie_oh/Projects/PythonTutorials/Socratica/Circles/test_circles.py", line 4, in <module> from circles import circle_area File "/home/yo_scottie_oh/Projects/PythonTutorials/Socratica/Circles/circles.py", line 14, in <module> A = circle_area(r) ^^^^^^^^^^^^^^ File "/home/yo_scottie_oh/Projects/PythonTutorials/Socratica/Circles/circles.py", line 6, in circle_area return pi*(r**2) ~^^~ TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' [yo_scottie_oh@nobara Circles]$
I've been banging my head against the wall for hours now trying to figure out why when I execute the same command as the instructor, it appears to execute my Python scripts themselves instead of running the unit tests.
Other things I've tried:
I've read the Python documentation on unit testing. I tried adding this to the end of the test_circles.py document, but that did not change anything.
if __name__ == '__main__': unittest.main()
I've tried following this other written tutorial. After I create the text documents and organize them in the separate shapes and tests folders and run the command
python -m unittest discover -v
, again I get a different result from the author.Author's result:
``` test_area (test_circle.TestCircle) ... ok test_circle_instance_of_shape (test_circle.TestCircle) ... ok test_create_circle_negative_radius (test_circle.TestCircle) ... ok test_area (test_square.TestSquare) ... ok test_create_square_negative_length (test_square.TestSquare) ... ok test_square_instance_of_shape (test_square.TestSquare) ... ok
---------------------------------------------------------------------- Ran 6 tests in 0.002s
OK ```
My result:
``` [yo_scottie_oh@nobara test]$ python -m unittest discover -v test_circle (unittest.loader._FailedTest.test_circle) ... ERROR test_square (unittest.loader._FailedTest.test_square) ... ERROR
====================================================================== ERROR: test_circle (unittest.loader._FailedTest.test_circle) ---------------------------------------------------------------------- ImportError: Failed to import test module: test_circle Traceback (most recent call last): File "/usr/lib64/python3.11/unittest/loader.py", line 419, in _find_test_path module = self._get_module_from_name(name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/unittest/loader.py", line 362, in _get_module_from_name import(name) File "/home/yo_scottie_oh/Projects/PythonTutorials/PythonUnitTesting/test/test_circle.py", line 4, in <module> from shapes.circle import Circle ModuleNotFoundError: No module named 'shapes'
====================================================================== ERROR: test_square (unittest.loader._FailedTest.test_square) ---------------------------------------------------------------------- ImportError: Failed to import test module: test_square Traceback (most recent call last): File "/usr/lib64/python3.11/unittest/loader.py", line 419, in _find_test_path module = self._get_module_from_name(name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/unittest/loader.py", line 362, in _get_module_from_name import(name) File "/home/yo_scottie_oh/Projects/PythonTutorials/PythonUnitTesting/test/test_square.py", line 3, in <module> from shapes.square import Square ModuleNotFoundError: No module named 'shapes'
---------------------------------------------------------------------- Ran 2 tests in 0.000s
FAILED (errors=2) ```
So yeah… this brings me to my question: What’s the obvious thing that everybody else gets that I'm missing? Is the tutorial outdated? Is it because the instructor is on Windows and I’m on Linux? Why won’t my unit tests run?
- Configuring NeoVim as a Python IDE (2023) | Siddharta Govindaraj | Sun 07 May 2023www.siddharta.me Configuring NeoVim as a Python IDE (2023)
As I blogged about in the previous two articles, I recently updated my NeoVim configuration for the fourth time. Although it might sound like a...
Siddharta Govindaraj writes:
> As I blogged about in the previous two articles, I recently updated my NeoVim configuration for the fourth time. Although it might sound like a lot of config updates, keep in mind that it happened over a period of four years. > >- The first version was a port of my existing Vim configuration. Because NeoVim is backward compatible with Vim, you can just move the configuration over and it will work >- In the second version, I migrated my plugin manager to Packer. This config was a mix of old style Vim config and the newer NeoVim style with some plugins migrated to Lua equivalents >- Then I decided to go 100% Lua config and started using Kickstart.nvim and LazyVim. >- This fourth time around I used Kickstart and LazyVim as guides to write my own from scratch. > > You can find my NeoVim configuration on Github. > > In this article I am going to go through and explain my configuration step-by-step. I have a terrible memory, so this post will also serve as a guide when I inevitably need to look through this file in the future.
- zpy: Zsh helpers for Python venvs, with uv or pip-toolsgithub.com GitHub - AndydeCleyre/zpy: Zsh helpers for Python venvs, with uv or pip-tools
Zsh helpers for Python venvs, with uv or pip-tools - AndydeCleyre/zpy
cross-posted from: https://programming.dev/post/12688262
> Hello! > > This is my little Zsh frontend for Python venv and dependency management, as well as pipx-like app installation. > > It's not new, but I just made a new release that can use uv as a backend, making it much faster (and hipper, obviously). > > If you have zpy installed, you can install uv with the
pipz
command, and from then on zpy will use uv instead of Python's venv module and pip-tools: > >zsh > % pipz install uv >
> > If you have any questions, please ask! > > I personally use it in combination with mise (for Python runtime management) and flit (for package publishing), but aim to keep it rather agnostic and interoperable. - My approach to building an open-source data tool: Python vs JavaScriptdev.to My approach to building an open-source data tool: Python vs JavaScript
When we rebooted Latitude I strongly pushed the team to use Python as our main language. It was an...
Hi there 👋, I’m Gerard, founder of Latitude.
I have written an article on how I approached building an open-source data tool. I had doubts about Python vs JavaScript, but I’m happy with the path I chose.
Would love it if you guys give me any feedback!