<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Как исправить ошибку &#x27;No module named distutils&#x27; в Python 3.12+]]></title><description><![CDATA[<p dir="auto">Если вы работаете с Python 3.12 или новее, вероятно, уже встречались с ошибкой <code>ModuleNotFoundError: No module named 'distutils'</code>. Эта проблема появляется при попытке установить пакеты или запустить код, который зависит от удалённого модуля distutils. Разберёмся, почему это происходит и как быстро это исправить.</p>
<p dir="auto">Ошибка не означает, что у вас проблемы с установкой Python или испорчена система. Это просто результат того, что разработчики Python решили убрать модуль из стандартной библиотеки. Нужно просто знать, как адаптировать свой код и окружение к новым требованиям.</p>
<h2>Почему distutils был удалён</h2>
<p dir="auto">Модуль <code>distutils</code> долгое время использовался для сборки и установки дополнительных модулей Python. Однако со временем сообщество разработчиков понимало, что модуль устарел и имеет архитектурные проблемы. Вместо него появился более современный и гибкий <code>setuptools</code>.</p>
<p dir="auto">Начиная с <strong>Python 3.12, distutils был полностью удалён из стандартной библиотеки</strong>. Это означает, что любой импорт вроде <code>import distutils</code> или <code>from distutils.core import setup</code> будет вызывать ошибку. Многие популярные библиотеки (TensorFlow, PyMC3, речевые модули) всё ещё содержат код, который пытается использовать distutils при импорте или установке.</p>
<p dir="auto">Это не баг, а <strong>намеренное изменение</strong>, которое заставляет разработчиков переходить на современные инструменты. К счастью, решение есть и оно довольно простое.</p>
<h2>Основное решение: установка setuptools</h2>
<p dir="auto">Первый и самый надёжный способ исправить проблему — установить пакет <code>setuptools</code>. Этот пакет предоставляет функциональность, которая раньше была в distutils, и большинство современных пакетов используют его вместо встроенного модуля.</p>
<p dir="auto">Установка зависит от вашей операционной системы. Если у вас Linux (Ubuntu, Debian или производные), используйте пакетный менеджер. На macOS и Windows проще всего работать через pip. Убедитесь, что у вас достаточно прав, и выполните нужную команду для вашей системы.</p>
<p dir="auto"><strong>Для Linux (Ubuntu/Debian):</strong></p>
<pre><code class="language-bash">sudo apt install python3-setuptools
</code></pre>
<p dir="auto"><strong>Для macOS и Windows через pip:</strong></p>
<pre><code class="language-bash">pip install setuptools
</code></pre>
<p dir="auto">Если вы используете более новые инструменты управления пакетами (например, <code>uv</code>), команда будет:</p>
<pre><code class="language-bash">uv add setuptools
</code></pre>
<p dir="auto">После установки <strong>setuptools</strong> большинство пакетов, которые зависят от distutils, должны работать без дополнительных изменений. Проверьте, пропала ли ошибка, попробовав снова импортировать нужный вам модуль.</p>
<h2>Когда setuptools недостаточно</h2>
<p dir="auto">Иногда даже после установки setuptools ошибка не исчезает. Это может произойти по нескольким причинам. Во-первых, версия setuptools, установленная в вашей системе через пакетный менеджер, может быть старой и несовместимой с Python 3.12. Во-вторых, некоторые пакеты напрямую импортируют distutils вместо использования setuptools.</p>
<p dir="auto">Есть несколько дополнительных подходов, которые помогают в сложных ситуациях:</p>
<ul>
<li>
<p dir="auto"><strong>Явный импорт setuptools.dist</strong>: добавьте <code>import setuptools.dist</code> в начало вашего файла перед другими импортами. Это заставляет Python использовать версию distutils из setuptools вместо встроенной (которой уже нет).</p>
</li>
<li>
<p dir="auto"><strong>Обновите версию setuptools</strong>: убедитесь, что у вас установлена последняя версия. Выполните <code>pip install --upgrade setuptools</code>.</p>
</li>
<li>
<p dir="auto"><strong>Проверьте версию пакета, вызывающего ошибку</strong>: некоторые популярные библиотеки (как PyMC3) устарели и не поддерживают Python 3.12. Попробуйте обновить пакет или переойти на его более новую версию (например, PyMC вместо PyMC3).</p>
</li>
<li>
<p dir="auto"><strong>Обойтись без системных пакетов</strong>: на Ubuntu 24.04 и Linux Mint 22 пакетный менеджер может установить старую версию setuptools. В этом случае лучше использовать <code>pip</code> с флагом <code>--break-system-packages</code> (на свой риск) или установить Python через инструменты вроде <code>pyenv</code>.</p>
</li>
</ul>
<h2>Практический чек-лист</h2>
<p dir="auto">Следуйте этим шагам в порядке, пока ошибка не исчезнет:</p>
<ol>
<li>Убедитесь, что вы действительно используете Python 3.12 или новее (команда: <code>python --version</code>)</li>
<li>Установите или обновите setuptools: <code>pip install --upgrade setuptools</code></li>
<li>Попробуйте импортировать нужный вам пакет</li>
<li>Если ошибка остаётся, добавьте <code>import setuptools.dist</code> в начало файла</li>
<li>Проверьте, доступна ли новая версия проблемного пакета (обновите через <code>pip install --upgrade имя_пакета</code>)</li>
<li>Если ничего не помогает — временно переключитесь на Python 3.11 или старше, пока разработчики пакета не обновят его</li>
</ol>
<h2>Разные сценарии и их решения</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Решение</th>
<th>Примечание</th>
</tr>
</thead>
<tbody>
<tr>
<td>Первичная установка пакета на Python 3.12</td>
<td><code>pip install setuptools</code>, затем переустановить пакет</td>
<td>Самое простое решение</td>
</tr>
<tr>
<td>PyMC3, TensorFlow или другие старые библиотеки</td>
<td>Обновиться на новую версию (PyMC 5+, TensorFlow с поддержкой 3.12)</td>
<td>Разработчики должны были обновить код</td>
</tr>
<tr>
<td>Собственный код использует distutils</td>
<td>Замените на setuptools в <a href="http://setup.py" target="_blank" rel="noopener noreferrer">setup.py</a></td>
<td>Измените <code>from distutils.core import setup</code> на <code>from setuptools import setup</code></td>
</tr>
<tr>
<td>Linux с системным Python 3.12</td>
<td>Установите python3-full или используйте виртуальное окружение</td>
<td>Системный Python может быть несовместим</td>
</tr>
<tr>
<td>Работаете в контейнере или на сервере</td>
<td>Добавьте <code>RUN apt install python3-setuptools</code> в Dockerfile</td>
<td>Убедитесь, что пакет установлен на этапе сборки</td>
</tr>
</tbody>
</table>
<h2>Долгосрочная стратегия</h2>
<p dir="auto">Эта проблема будет актуальна некоторое время, так как в мире Python огромное количество legacy-кода, который никто не обновляет. Но понимание её природы поможет вам действовать уверенней.</p>
<p dir="auto">Если вы разработчик и пишете свои пакеты, <strong>уже сейчас переходите на setuptools</strong> вместо distutils. Обновите свои <code>setup.py</code> файлы, чтобы использовать <code>setuptools</code> вместо <code>distutils.core</code>. Это не сложно, но защитит ваш код от проблем в будущем. Самые современные проекты вообще переходят на <code>pyproject.toml</code> и инструменты вроде <code>build</code>, полностью отказываясь от <a href="http://setup.py" target="_blank" rel="noopener noreferrer">setup.py</a>.</p>
<p dir="auto">Для обычных пользователей совет простой: <strong>не зацикливайтесь на этой ошибке</strong>, почти всегда помогает установка setuptools. Если работаете на работе и не можете устанавливать системные пакеты — создайте виртуальное окружение Python 3.11 или используйте Docker. Это будет надёжнее и безопаснее, чем обходить ограничения системы.</p>
]]></description><link>https://forum.exlends.ru/topic/752/kak-ispravit-oshibku-no-module-named-distutils-v-python-3.12</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:11:46 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/752.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Feb 2026 09:53:12 GMT</pubDate><ttl>60</ttl></channel></rss>