#348: JavaScript in Your Python
About the show
Sponsored by us! Support our work through:
Connect with the hosts
- Michael: @mkennedy@fosstodon.org
- Brian: @brianokken@fosstodon.org
- Show: @pythonbytes@fosstodon.org
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 11am PT. Older video versions available there too.
Brian #1: Differentiating between writing down dependencies to use packages and for packages themselves
- Brett Cannon
- Why can’t we just use pyproject.toml and stop using requirements.txt?
- Nope. At least not yet. They’re currently for different things.
- pyproject.toml
- There’s
project.dependencies
andproject.optional-dependencies.tests
that kinda would work for listing dependencies for an app. - But you can’t say
pip install -r pyproject.toml
. It doesn’t work. And that’s weird. project
is intended for packaged projects.
- There’s
- requirements.txt
- for applications and other non-packaged projects
- It has specific versions
- works great with pip
- What then?
- Either we stick with requirements.txt
- Or we invent some other file, maybe requirements.toml?
- Or maybe (Brian’s comment), add something like
[application]
andapplication.dependencies
andapplication.optional-dependencies.tests
to pyproject.toml
Michael #2: PythonMonkey
- PythonMonkey is a Mozilla SpiderMonkey JavaScript engine embedded into the Python VM, using the Python engine to provide the JS host environment.
- This product is in an early stage, approximately 80% to MVP as of July 2023. It is under active development by Distributive. External contributions and feedback are welcome and encouraged.
- It will enable JavaScript libraries to be used seamlessly in Python code and vice versa — without any significant performance penalties.
- Call Python packages like NumPy from within a JavaScript library, or use NPM packages like
[crypto-js](https://www.npmjs.com/package/crypto-js)
directly from Python. - Executing WebAssembly modules in Python becomes trivial using the WebAssembly API and engine from SpiderMonkey.
- More details in Will Pringle’s article.
Brian #3: Quirks of Python package versioning
- Seth Larson
- Yes, we have SemVer, 1.2.3, and CalVer, 2023.6.1, and suffixes for pre-release, 1.2.3pre1.
- But it gets way more fun than that, if you get creative
- Here’s a few
v
is an optional prefix, likev.1.0
- You can include an “Epoch” and separate it from the version with a
!
, like20!1.2.3
- Local versions with alphanumerics, periods, dashes, underscores, like
1.0.0+ubuntu-1
. PyPI rejects those. That’s probably good. - Long versions. There’s no max length for a version number. How about
1.2.3.4000000000000000001
? - Pre, post, dev aren’t mutually exclusive:
1.0.0-pre0-post0-dev0
- More craziness in article
-
Michael #4: bear-type
- Beartype is an open-source PEP-compliant near-real-time pure-Python runtime type-checker emphasizing efficiency, usability, and thrilling puns.
Annotate @beartype-decorated classes and callables with type hints.
- Call those callables with valid parameters: Transparent
- Call those callables with invalid parameters: Boom
Traceback: raise exception_cls( beartype.roar.BeartypeCallHintParamViolation: @beartyped quote_wiggum() parameter lines=[b'Oh, my God! A horrible plane crash!', b'Hey, everybody! Get a load of thi...'] violates type hint list[str], as list item 0 value b'Oh, my God! A horrible plane crash!' not str.
Extras
Brian:
- Python Testing with Pytest Course Bundle: Limited Pre-Release Beta
- Use code PYTHONBYTES now through Aug 31for 20% discount (discount extended through the end of the month)
- What’s a pre-release beta? There’s a video. Check out the link.
- Error-tolerant pytest discovery in VSCode
- Finally! But you gotta turn it on. Also, I gotta talk to them about the proper non-capitalization of
pytest
.
- Finally! But you gotta turn it on. Also, I gotta talk to them about the proper non-capitalization of
- We’re at RC1 for Python 3.12.0
- Hard to believe it’s that time of year again
Michael:
- PyPI hires a Safety & Security Engineer, welcome Mike Fiedler
- PackagingCon October 26-28
- Cloud Builders: Python Conf (born in Ukraine): September 6, 2023 | online
Joke: Learning JavaScript