<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: rye</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/rye.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2024-08-21T12:08:15+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Armin Ronacher</title><link href="https://simonwillison.net/2024/Aug/21/armin-ronacher/#atom-tag" rel="alternate"/><published>2024-08-21T12:08:15+00:00</published><updated>2024-08-21T12:08:15+00:00</updated><id>https://simonwillison.net/2024/Aug/21/armin-ronacher/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lucumr.pocoo.org/2024/8/21/harvest-season/"&gt;&lt;p&gt;There is an elephant in the room which is that Astral is a VC funded company. What does that mean for the future of these tools? Here is my take on this: for the community having someone pour money into it can create some challenges. For the PSF and the core Python project this is something that should be considered. However having seen the code and what uv is doing, even in the worst possible future this is a very forkable and maintainable thing. I believe that even in case Astral shuts down or were to do something incredibly dodgy licensing wise, the community would be better off than before uv existed.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lucumr.pocoo.org/2024/8/21/harvest-season/"&gt;Armin Ronacher&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="open-source"/><category term="python"/><category term="rye"/><category term="uv"/><category term="astral"/></entry><entry><title>uv: Unified Python packaging</title><link href="https://simonwillison.net/2024/Aug/20/uv-unified-python-packaging/#atom-tag" rel="alternate"/><published>2024-08-20T22:45:16+00:00</published><updated>2024-08-20T22:45:16+00:00</updated><id>https://simonwillison.net/2024/Aug/20/uv-unified-python-packaging/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://astral.sh/blog/uv-unified-python-packaging"&gt;uv: Unified Python packaging&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Huge new release from the Astral team today. &lt;a href="https://github.com/astral-sh/uv/releases/tag/0.3.0"&gt;uv 0.3.0&lt;/a&gt; adds a bewildering array of new features, as part of their attempt to build "Cargo, for Python".&lt;/p&gt;
&lt;p&gt;It's going to take a while to fully absorb all of this. Some of the key new features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;uv tool run cowsay&lt;/code&gt;, aliased to &lt;code&gt;uvx cowsay&lt;/code&gt; - a &lt;a href="https://github.com/pypa/pipx"&gt;pipx&lt;/a&gt; alternative that runs a tool in its own dedicated virtual environment (tucked away in &lt;code&gt;~/Library/Caches/uv&lt;/code&gt;), installing it if it's not present. It has a neat &lt;code&gt;--with&lt;/code&gt; option for installing extras - I tried that just now with &lt;code&gt;uvx --with datasette-cluster-map datasette&lt;/code&gt; and it ran Datasette with the &lt;code&gt;datasette-cluster-map&lt;/code&gt; plugin installed.&lt;/li&gt;
&lt;li&gt;Project management, as an alternative to tools like &lt;a href="https://python-poetry.org/"&gt;Poetry&lt;/a&gt; and &lt;a href="https://pdm-project.org/en/latest/"&gt;PDM&lt;/a&gt;. &lt;code&gt;uv init&lt;/code&gt; creates a &lt;code&gt;pyproject.toml&lt;/code&gt; file in the current directory, &lt;code&gt;uv add sqlite-utils&lt;/code&gt; then creates and activates a &lt;code&gt;.venv&lt;/code&gt; virtual environment, adds the package to that &lt;code&gt;pyproject.toml&lt;/code&gt; and adds all of its dependencies to a new &lt;code&gt;uv.lock&lt;/code&gt; file (&lt;a href="https://gist.github.com/simonw/e309647b7d5380c7c7e5864d567f697b"&gt;like this one&lt;/a&gt;). That &lt;code&gt;uv.lock&lt;/code&gt; is described as &lt;a href="https://docs.astral.sh/uv/concepts/projects/#lockfile"&gt;a universal or cross-platform lockfile&lt;/a&gt; that can support locking dependencies for multiple platforms.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astral.sh/uv/guides/scripts/"&gt;Single-file script execution&lt;/a&gt; using &lt;code&gt;uv run myscript.py&lt;/code&gt;, where those scripts can define their own dependencies using &lt;a href="https://peps.python.org/pep-0723/"&gt;PEP 723 inline metadata&lt;/a&gt;. These dependencies are listed in a specially formatted comment and will be installed into a virtual environment before the script is executed.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astral.sh/uv/concepts/python-versions/"&gt;Python version management&lt;/a&gt; similar to &lt;a href="https://docs.astral.sh/uv/concepts/python-versions/"&gt;pyenv&lt;/a&gt;. The new &lt;code&gt;uv python list&lt;/code&gt; command lists all Python versions available on your system (including detecting various system and Homebrew installations), and &lt;code&gt;uv python install 3.13&lt;/code&gt; can then install a uv-managed Python using  Gregory Szorc's invaluable &lt;a href="https://github.com/indygreg/python-build-standalone"&gt;python-build-standalone&lt;/a&gt; releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's all accompanied by &lt;a href="https://docs.astral.sh/uv/"&gt;new and very thorough documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The paint isn't even dry on this stuff - it's only been out for a few hours - but this feels &lt;em&gt;very&lt;/em&gt; promising to me. The idea that you can install &lt;code&gt;uv&lt;/code&gt; (a single Rust binary) and then start running all of these commands to manage Python installations and their dependencies is very appealing.&lt;/p&gt;
&lt;p&gt;If you’re wondering about the relationship between this and Rye - another project that Astral adopted solving a subset of these problems - &lt;a href="https://github.com/astral-sh/rye/discussions/1342"&gt;this forum thread&lt;/a&gt; clarifies that they intend to continue maintaining Rye but are eager for &lt;code&gt;uv&lt;/code&gt; to work as a full replacement.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/charliermarsh/status/1825958674239803515"&gt;@charliermarsh&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;&lt;/p&gt;



</summary><category term="packaging"/><category term="python"/><category term="rust"/><category term="rye"/><category term="uv"/><category term="astral"/></entry><entry><title>uv: Python packaging in Rust</title><link href="https://simonwillison.net/2024/Feb/15/uv-python-packaging-in-rust/#atom-tag" rel="alternate"/><published>2024-02-15T19:57:13+00:00</published><updated>2024-02-15T19:57:13+00:00</updated><id>https://simonwillison.net/2024/Feb/15/uv-python-packaging-in-rust/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://astral.sh/blog/uv"&gt;uv: Python packaging in Rust&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
"uv is an extremely fast Python package installer and resolver, written in Rust, and designed as a drop-in replacement for pip and pip-tools workflows."&lt;/p&gt;
&lt;p&gt;From Charlie Marsh and Astral, the team behind &lt;a href="https://github.com/astral-sh/ruff"&gt;Ruff&lt;/a&gt;, who describe it as a milestone in their pursuit of a "Cargo for Python".&lt;/p&gt;
&lt;p&gt;Also in this announcement: Astral are taking over stewardship of Armin Ronacher's Rye packaging tool, another Rust project.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; is reported to be 8-10x faster than regular &lt;code&gt;pip&lt;/code&gt;, increasing to 80-115x faster with a warm global module cache thanks to copy-on-write and hard links on supported filesystems - which saves on disk space too.&lt;/p&gt;
&lt;p&gt;It also has a &lt;code&gt;--resolution=lowest&lt;/code&gt; option for installing the lowest available version of dependencies - extremely useful for testing, I've been wanting this for my own projects for a while.&lt;/p&gt;
&lt;p&gt;Also included: &lt;code&gt;uv venv&lt;/code&gt; - a fast tool for creating new virtual environments with no dependency on Python itself.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/charliermarsh/status/1758216803275149389"&gt;@charliermarsh&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pip"&gt;pip&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruff"&gt;ruff&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/charlie-marsh"&gt;charlie-marsh&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="pip"/><category term="python"/><category term="rust"/><category term="rye"/><category term="ruff"/><category term="uv"/><category term="astral"/><category term="charlie-marsh"/></entry><entry><title>Rye: Added support for marking virtualenvs ignored for cloud sync</title><link href="https://simonwillison.net/2024/Feb/10/rye-added-support-for-marking-virtualenvs-ignored-for-cloud-sync/#atom-tag" rel="alternate"/><published>2024-02-10T06:50:00+00:00</published><updated>2024-02-10T06:50:00+00:00</updated><id>https://simonwillison.net/2024/Feb/10/rye-added-support-for-marking-virtualenvs-ignored-for-cloud-sync/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/mitsuhiko/rye/pull/589"&gt;Rye: Added support for marking virtualenvs ignored for cloud sync&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A neat feature in the new Rye 0.22.0 release. It works by using an xattr Rust crate to set the attributes “com.dropbox.ignored” and “com.apple.fileprovider.ignore#P” on the folder.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://github.com/mitsuhiko/rye/releases/tag/0.22.0"&gt;Rye 0.22.0 release notes&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dropbox"&gt;dropbox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="dropbox"/><category term="rust"/><category term="rye"/></entry><entry><title>Quoting Armin Ronacher</title><link href="https://simonwillison.net/2024/Feb/4/armin-ronacher/#atom-tag" rel="alternate"/><published>2024-02-04T15:12:06+00:00</published><updated>2024-02-04T15:12:06+00:00</updated><id>https://simonwillison.net/2024/Feb/4/armin-ronacher/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lucumr.pocoo.org/2024/2/4/rye-a-vision/"&gt;&lt;p&gt;Rye lets you get from no Python on a computer to a fully functioning Python project in under a minute with linting, formatting and everything in place.&lt;/p&gt;
&lt;p&gt;[...] Because it was demonstrably designed to avoid interference with any pre-existing Python configurations, Rye allows for a smooth and gradual integration and the emotional barrier of picking it up even for people who use other tools was shown to be low.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lucumr.pocoo.org/2024/2/4/rye-a-vision/"&gt;Armin Ronacher&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="python"/><category term="rye"/></entry><entry><title>Weeknotes: Miscellaneous research into Rye, ChatGPT Code Interpreter and openai-to-sqlite</title><link href="https://simonwillison.net/2023/May/1/weeknotes/#atom-tag" rel="alternate"/><published>2023-05-01T05:12:09+00:00</published><updated>2023-05-01T05:12:09+00:00</updated><id>https://simonwillison.net/2023/May/1/weeknotes/#atom-tag</id><summary type="html">
    &lt;p&gt;I gave myself some time off stressing about my core responsibilities this week after PyCon, which meant allowing myself to be distracted by some miscellaneous research projects.&lt;/p&gt;
&lt;h4&gt;Rye&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/mitsuhiko/rye"&gt;Rye&lt;/a&gt; is a new experimental twist on Python packaging from Armin Ronacher. He's been quite apologetic about it, asking &lt;a href="https://github.com/mitsuhiko/rye/discussions/6"&gt;Should Rye Exist?&lt;/a&gt; - Python packaging is a crowded space right now!&lt;/p&gt;
&lt;p&gt;Personally, I think a working prototype of an interesting idea is always worthwhile. My experience is that running code increases the quality of the discussion around an idea enormously, because it gives people something concrete to talk about.&lt;/p&gt;
&lt;p&gt;Rye has some &lt;em&gt;really&lt;/em&gt; interesting ideas. By far my favourite is how it bundles Python itself: it doesn't depend on a system Python, instead downloading a standalone Python build from the &lt;a href="https://github.com/indygreg/python-build-standalone"&gt;python-build-standalone&lt;/a&gt; project and stashing it away in a &lt;code&gt;~/.rye&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;I love this. Getting Python running on a system is often way harder than it should be. Rye provides a single binary (written in Rust) which can bootstrap a working Python environment, without interfering with the system Python or any other Python environments that might already be installed.&lt;/p&gt;
&lt;p&gt;I wrote up &lt;a href="https://til.simonwillison.net/python/rye"&gt;a few notes on Rye&lt;/a&gt; in a TIL earlier this week, mainly detailing how it works and where it puts things.&lt;/p&gt;
&lt;p&gt;I also released &lt;a href="https://github.com/simonw/datasette/releases/tag/0.64.3"&gt;Datasette 0.64.3&lt;/a&gt; with a &lt;a href="https://github.com/simonw/datasette/issues/2065"&gt;tiny fix&lt;/a&gt; to ensure it would install cleanly using &lt;code&gt;rye install datasette&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;ChatGPT Code Interpreter&lt;/h4&gt;
&lt;p&gt;I've been having a whole lot of fun exploring this. I wrote about how &lt;a href="https://simonwillison.net/2023/Apr/12/code-interpreter/"&gt;I've been using it to run micro-benchmarks&lt;/a&gt; a few weeks ago - today I &lt;a href="https://til.simonwillison.net/llms/code-interpreter-expansions"&gt;figured out a pattern&lt;/a&gt; for installing additional Python packages (despite its lack of an internet connection) and even uploading binaries for Deno and Lua to grant it the ability to run code in other languages!&lt;/p&gt;
&lt;p&gt;I think it's the most interesting thing in all of ChatGPT/LLM world at the moment, which is a big statement.&lt;/p&gt;
&lt;h4&gt;openai-to-sqlite&lt;/h4&gt;
&lt;p&gt;Inspired by a Datasette &lt;a href="https://simonwillison.net/2021/Feb/19/office-hours/"&gt;Office Hours&lt;/a&gt; conversation on Friday I decided to see if I could figure out a way to run simple sentiment analysis against data in a SQLite database using any of my various tools.&lt;/p&gt;
&lt;p&gt;I ended up adding a new mechanism to my &lt;code&gt;openai-to-sqlite&lt;/code&gt; CLI tool - it can now execute SQL queries that can update existing tables with the results of a &lt;code&gt;chatgpt()&lt;/code&gt; API call using a custom SQL function.&lt;/p&gt;
&lt;p&gt;I wrote more about that in &lt;a href="https://simonwillison.net/2023/Apr/29/enriching-data/"&gt;Enriching data with GPT3.5 and SQLite SQL functions&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Upgraded social media cards for my TILs&lt;/h4&gt;

&lt;p&gt;My &lt;a href="https://til.simonwillison.net/"&gt;Today I Learned&lt;/a&gt; site has had social media cards - images that show up in link previews when URLs are shared - for a long time now. Since few of my TILs have images of their own it generates these as screenshots of the pages themselves.&lt;/p&gt;

&lt;p&gt;Until recently it stored these images as PNG files directly in the SQLite database itself. Vercel has a 50MB size limit on deployments and the other day the screenshots finally tipped the database over that limit.&lt;/p&gt;

&lt;p&gt;To fix it, I moved the images out of the SQLite database and put them in an S3 bucket instead. This also meant I could increase their size and resolution - they are now generated with the &lt;a href="https://shot-scraper.datasette.io/"&gt;shot-scraper&lt;/a&gt; &lt;code&gt;--retina&lt;/code&gt; option which doubles their size to 1600x800 pixels.&lt;/p&gt;

&lt;p&gt;This ended up being a fun exercise in combining both &lt;code&gt;shot-scraper&lt;/code&gt; and my &lt;a href="https://s3-credentials.readthedocs.io/"&gt;s3-credentials&lt;/a&gt; CLI tools. I wrote up full details of how the new screenshot system works in a new TIL, &lt;a href="https://til.simonwillison.net/shot-scraper/social-media-cards"&gt;Social media cards generated with shot-scraper&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Next week: a webinar on Prompt Injection&lt;/h4&gt;
&lt;p&gt;My other blog entry this week introduced &lt;a href="https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"&gt;The Dual LLM pattern for building AI assistants that can resist prompt injection&lt;/a&gt; - my latest thinking on how we might be able to build AI assistants even without a robust solution to the prompt injection problem.&lt;/p&gt;
&lt;p&gt;I have a speaking engagement lined up for next week: the &lt;a href="https://www.crowdcast.io/c/ht7qt3rvesvg"&gt;LangChain Prompt Injection Webinar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'll be discussing &lt;a href="https://simonwillison.net/series/prompt-injection/"&gt;prompt injection  attacks&lt;/a&gt; against LLMs on a panel with Willem Pienaar, Kojin Oshiba and Jonathan Cohen and Christopher Parisien from NVIDIA.&lt;/p&gt;
&lt;p&gt;I think it will be an interesting conversation. I'm going to reiterate my argument that &lt;a href="https://simonwillison.net/2022/Sep/17/prompt-injection-more-ai/"&gt;You can’t solve AI security problems with more AI&lt;/a&gt; - a position that I'm not sure is shared by the other members of the panel!&lt;/p&gt;
&lt;h4&gt;Entries this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2023/Apr/29/enriching-data/"&gt;Enriching data with GPT3.5 and SQLite SQL functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"&gt;The Dual LLM pattern for building AI assistants that can resist prompt injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Releases this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/s3-credentials/releases/tag/0.15"&gt;s3-credentials 0.15&lt;/a&gt;&lt;/strong&gt; - 2023-04-30&lt;br /&gt;A tool for creating credentials for accessing S3 buckets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/openai-to-sqlite/releases/tag/0.3"&gt;openai-to-sqlite 0.3&lt;/a&gt;&lt;/strong&gt; - 2023-04-29&lt;br /&gt;Save OpenAI API results to a SQLite database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette/releases/tag/0.64.3"&gt;datasette 0.64.3&lt;/a&gt;&lt;/strong&gt; - 2023-04-27&lt;br /&gt;An open source multi-tool for exploring and publishing data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/shot-scraper/releases/tag/1.2"&gt;shot-scraper 1.2&lt;/a&gt;&lt;/strong&gt; - 2023-04-27&lt;br /&gt;A command-line utility for taking automated screenshots of websites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-explain/releases/tag/0.1a2"&gt;datasette-explain 0.1a2&lt;/a&gt;&lt;/strong&gt; - 2023-04-24&lt;br /&gt;Explain and validate SQL queries as you type them into Datasette&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;TIL this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/llms/code-interpreter-expansions"&gt;Expanding ChatGPT Code Interpreter with Python packages, Deno and Lua&lt;/a&gt; - 2023-05-01&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/shot-scraper/social-media-cards"&gt;Social media cards generated with shot-scraper&lt;/a&gt; - 2023-04-30&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/deno/deno-kv"&gt;Deno KV&lt;/a&gt; - 2023-04-28&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/python/pip-cache"&gt;The location of the pip cache directory&lt;/a&gt; - 2023-04-28&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/python/rye"&gt;A few notes on Rye&lt;/a&gt; - 2023-04-27&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/weeknotes"&gt;weeknotes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-injection"&gt;prompt-injection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/code-interpreter"&gt;code-interpreter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="projects"/><category term="weeknotes"/><category term="prompt-injection"/><category term="chatgpt"/><category term="rye"/><category term="code-interpreter"/><category term="coding-agents"/></entry><entry><title>Rye</title><link href="https://simonwillison.net/2023/Apr/24/rye/#atom-tag" rel="alternate"/><published>2023-04-24T04:02:42+00:00</published><updated>2023-04-24T04:02:42+00:00</updated><id>https://simonwillison.net/2023/Apr/24/rye/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/mitsuhiko/rye"&gt;Rye&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Armin Ronacher's take on a Python packaging tool. There are a lot of interesting ideas in this one - it's written in Rust, configured using &lt;code&gt;pyproject.toml&lt;/code&gt; and has some very strong opinions, including completely hiding &lt;code&gt;pip&lt;/code&gt; from view and insisting you use &lt;code&gt;rye add package&lt;/code&gt; instead. Notably, it doesn't use the system Python at all: instead, it downloads a pre-compiled standalone Python from Gregory Szorc's &lt;a href="https://github.com/indygreg/python-build-standalone"&gt;python-build-standalone&lt;/a&gt; project - the same approach I used for the Datasette Desktop Electron app.&lt;/p&gt;
&lt;p&gt;Armin warns that this is just an exploration, with no guarantees of future maintenance - and even has an issue open titled &lt;a href="https://github.com/mitsuhiko/rye/discussions/6"&gt;Should Rye exist?&lt;/a&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pypi"&gt;pypi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rye"&gt;rye&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="packaging"/><category term="pypi"/><category term="python"/><category term="rust"/><category term="rye"/></entry></feed>