<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python Developer Tooling Handbook – Coming from Another Language</title>
    <link>https://pydevtools.com/handbook/topics/polyglot/</link>
    <description>Python tooling for developers fluent in Go, Rust, TypeScript, Java, or C#.</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 08 Apr 2026 13:59:07 -0400</lastBuildDate>
    
	  <atom:link href="https://pydevtools.com/handbook/topics/polyglot/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Python Tooling for C# Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-csharp-developers/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-csharp-developers/</guid>
      <description>&lt;p&gt;Installing .NET gives you everything in one box. Installing Python gives you a box and a list of parts to assemble yourself. The runtime, the dependency sandbox, and the project tooling are separate concerns, maintained by separate communities, and chosen by the developer. That separation is the single biggest adjustment for someone coming from .NET.&lt;/p&gt;
&lt;p&gt;This guide maps C#/.NET concepts to their closest Python equivalents and explains where the mental models diverge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for Go Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-go-developers/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-go-developers/</guid>
      <description>&lt;p&gt;Go ships one toolchain that handles compilation, dependency management, testing, formatting, and vetting. Python does not. That single difference explains most of the friction a Go developer will encounter when picking up Python, and most of that friction disappears once the mental model clicks.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Many Go tools have Python counterparts, though the boundaries between them fall in different places.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for Java Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-java-developers/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-java-developers/</guid>
      <description>&lt;p&gt;Your first day writing Python, you will look for Maven and not find it. No single tool compiles code, resolves dependencies, runs tests, and packages artifacts in one standardized lifecycle. Python&amp;rsquo;s tooling is lighter and more modular, with small tools that each handle one concern. This article maps Java concepts to their Python counterparts and explains where the mental models diverge.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Java&lt;/th&gt;
          &lt;th&gt;Python&lt;/th&gt;
          &lt;th&gt;Notes&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;SDKMAN (version installation)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;uv python install&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Python version management (the JDK bundles runtime, compiler, and tools; &lt;code&gt;uv python install&lt;/code&gt; only provides the interpreter)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Maven / Gradle&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Closest single tool for deps/envs/builds (but no standardized lifecycle phases)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pom.xml / build.gradle&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/pyproject.toml/&#34;&gt;pyproject.toml&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Central project configuration file&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Maven Central&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://pydevtools.com/handbook/explanation/what-is-pypi/&#34;&gt;PyPI&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Public package registry&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;JUnit&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/pytest/&#34;&gt;pytest&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Testing framework&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Checkstyle / SpotBugs&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/ruff/&#34;&gt;Ruff&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Linting and some bug-pattern checks (partial SpotBugs overlap)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;google-java-format&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ruff format&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Code formatting&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Java&amp;rsquo;s static type checking&lt;/td&gt;
          &lt;td&gt;mypy / pyright / ty&lt;/td&gt;
          &lt;td&gt;Optional, gradual (separate tools, not a compiler)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mvn package&lt;/code&gt; / &lt;code&gt;mvn deploy&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;uv build&lt;/code&gt; + &lt;code&gt;uv publish&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;uv build&lt;/code&gt; creates distribution artifacts for library publishing; Python has no WAR equivalent&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;JAR (library)&lt;/td&gt;
          &lt;td&gt;wheel / sdist&lt;/td&gt;
          &lt;td&gt;Distribution formats (scoped to library packaging)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:flex-col hx:rounded-lg hx:border hx:py-4 hx:px-4 hx:border-gray-200 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-purple-200 hx:bg-purple-100 hx:text-purple-900 hx:dark:border-purple-200/30 hx:dark:bg-purple-900/30 hx:dark:text-purple-200&#34;&gt;
  &lt;p class=&#34;hx:flex hx:items-center hx:font-medium&#34;&gt;&lt;svg height=16px class=&#34;hx:inline-block hx:align-middle hx:mr-2&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z&#34;/&gt;&lt;/svg&gt;Important&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for Node.js Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-nodejs-developers/</link>
      <pubDate>Wed, 13 May 2026 07:40:21 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-nodejs-developers/</guid>
      <description>&lt;p&gt;npm installs packages, locks versions, runs scripts, and publishes modules. Python splits those responsibilities differently, but &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; consolidates most of them into a single command. This guide maps Node.js concepts to their Python equivalents, with emphasis on &lt;code&gt;npm&lt;/code&gt; scripts and the daily runtime workflow. For &lt;code&gt;tsc&lt;/code&gt;-style type-checking comparisons, see the companion &lt;a href=&#34;https://pydevtools.com/handbook/explanation/python-tooling-for-typescript-developers/&#34;&gt;TypeScript developers guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most Node.js workflows have a recognizable Python counterpart:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for PHP Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-php-developers/</link>
      <pubDate>Tue, 12 May 2026 07:34:26 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-php-developers/</guid>
      <description>&lt;p&gt;Composer, PHPUnit, PHP-CS-Fixer, PHPStan. PHP developers already work with a specialized toolchain. Python&amp;rsquo;s tooling is organized around the same concerns but splits them differently, and the differences in how each language handles isolation, versioning, and execution shape every tool in the stack. This guide maps PHP concepts to their Python equivalents and explains where the mental models diverge.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most PHP workflows have a recognizable Python counterpart:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for Ruby Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-ruby-developers/</link>
      <pubDate>Thu, 14 May 2026 08:16:43 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-ruby-developers/</guid>
      <description>&lt;p&gt;Bundler manages dependencies, RuboCop enforces style, RSpec runs tests, and rbenv switches Ruby versions. Python has equivalent tools for each of those jobs, though they are organized differently. &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; consolidates dependency management, interpreter installation, and virtual environment handling into one command, covering territory that Ruby spreads across Bundler, rbenv, and ruby-build. This guide maps Ruby tooling concepts to their Python counterparts so Ruby developers can orient quickly.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most Ruby workflows have a recognizable Python equivalent:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for Rust Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-rust-developers/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-rust-developers/</guid>
      <description>&lt;p&gt;Cargo manages dependencies, builds code, runs tests, and publishes crates. Separate tools handle formatting (rustfmt, invoked via &lt;code&gt;cargo fmt&lt;/code&gt;) and linting (clippy, via &lt;code&gt;cargo clippy&lt;/code&gt;), while rustup manages toolchain installation. Python has no single tool with that scope, but &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; comes closest. This article maps Rust tooling concepts to their Python counterparts so Rust developers can orient quickly.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most Rust workflows have a recognizable Python equivalent:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Tooling for TypeScript Developers</title>
      <link>https://pydevtools.com/handbook/explanation/python-tooling-for-typescript-developers/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/python-tooling-for-typescript-developers/</guid>
      <description>&lt;p&gt;TypeScript developers moving to Python often expect a single tool like npm that handles everything. Python splits those responsibilities differently, and the reasons behind that split affect how every tool behaves. This guide maps TypeScript/JS concepts to their Python equivalents and covers the daily workflow.&lt;/p&gt;
&lt;h2&gt;What Will Feel Familiar, and What Will Not&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-will-feel-familiar-and-what-will-not&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-will-feel-familiar-and-what-will-not&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most TypeScript/JS tools have a reasonable Python counterpart. The table below provides a rough translation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>uv for Non-Python Teams</title>
      <link>https://pydevtools.com/handbook/explanation/uv-for-non-python-teams/</link>
      <pubDate>Tue, 28 Apr 2026 21:54:51 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/handbook/explanation/uv-for-non-python-teams/</guid>
      <description>&lt;p&gt;A Java shop ships a database. In the corner of the repo sits a 200-line Python script that reshapes CI logs for humans. Nobody writes Python full time, but every new hire inherits it and spends an afternoon getting &lt;code&gt;python3&lt;/code&gt; to find the right &lt;code&gt;pandas&lt;/code&gt;. That&amp;rsquo;s the tax for not being a Python shop.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; removes it. For teams whose primary language isn&amp;rsquo;t Python, uv is the whole Python toolchain: one binary that replaces &lt;a href=&#34;https://pydevtools.com/handbook/reference/pip/&#34;&gt;pip&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/virtualenv/&#34;&gt;virtualenv&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/pyenv/&#34;&gt;pyenv&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/pipx/&#34;&gt;pipx&lt;/a&gt;, and &lt;a href=&#34;https://pydevtools.com/handbook/reference/pip-tools/&#34;&gt;pip-tools&lt;/a&gt; well enough that the Python onboarding doc shrinks to two lines.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
