Архив рубрики: Основы

Пользовательский ввод и его обработка в Python

Эффективная обработка вводимых данных является ключевым фактором для создания удобной для пользователя программы. Управление вводом данных может существенно повлиять на удобство работы пользователя и общий успех программы.

Python предоставляет широкий спектр инструментов для эффективного управления вводом, от встроенной функции input() до более продвинутых модулей, таких как argparse, и регулярных выражений. Однако в этой статье мы сосредоточимся на основах работы с пользовательским вводом в Python. Мы познакомимся с функцией input() и рассмотрим лучшие практики ее эффективного использования. К концу этой статьи вы будете лучше понимать, как работать со вводом данных в ваших программах на Python. Итак, давайте начнем! Читать

Алгоритм пузырьковой сортировки на Python

Пузырьковая сортировка – один из самых интуитивно понятных алгоритмов сортировки и идеальная отправная точка для всех, кто интересуется миром алгоритмов. Несмотря на свою простоту, пузырьковая сортировка дает наглядный пример фундаментальных концепций сортировки. В этой статье мы рассмотрим механику пузырьковой сортировки на примере реализации этого алгоритма на языке Python.

Что такое пузырьковая сортировка?

Пузырьковая сортировка – это алгоритм, основанный на сравнении, который сортирует список путем многократного прохода по списку, сравнения соседних элементов и их замены, если они расположены в неправильном порядке. Проход по списку повторяется до тех пор, пока список не будет отсортирован.

Название “пузырьковая сортировка” происходит от того, что мелкие элементы “всплывают” в верхнюю часть списка (начало массива), а крупные “опускаются” в нижнюю часть (конец массива).

Вот пошаговое объяснение того, как это работает:

  1. Начните с первых двух элементов и сравните их.
  2. Если первый элемент больше второго, то они меняются местами.
  3. Перейдите к следующей паре элементов и повторите процесс.
  4. Продолжайте менять местами элементы до тех пор, пока самый большой элемент не окажется в нужном месте в конце списка.
  5. Уменьшите диапазон элементов на единицу (так как самый большой теперь отсортирован) и повторите процесс для оставшихся элементов.

Реализация пузырьковой сортировки на Python

Рассмотрим код на языке Python, выполняющий пузырьковую сортировку:

def bubblesort(arr):
    n = len(arr)

    # Traverse through all array elements
    for i in range(n):
        # Last i elements are already in place, so the inner loop can skip them
        for j in range(n - i - 1):
            # Traverse the array from 0 to n-i-1 and swap if the element found is greater than the next element
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    
    return arr

Как работает этот код?

  1. Определим функцию bubblesort, которая принимает массив arr в качестве аргумента.
  2. Сохраняем длину массива в переменной n, потому что нам нужно знать, когда остановить процесс сортировки.
  3. Мы используем вложенный цикл, где внешний цикл представляет собой количество проходов, необходимых для сортировки массива, а внутренний проходит по сравниваемым элементам.
  4. Во внутреннем цикле мы выполняем сравнение: if arr[j] > arr[j+1]:. Таким образом мы проверяем, больше ли текущий элемент, чем следующий элемент.
  5. Если текущий элемент больше, то мы меняем местами два элемента, используя распаковку кортежа: arr[j], arr[j+1] = arr[j+1], arr[j].
  6. После каждого прохода наибольший элемент текущего подсписка “всплывает” на свое место, и на следующей итерации его можно не учитывать, чего мы и добиваемся, уменьшая диапазон внутреннего цикла.
  7. Процесс продолжается до тех пор, пока массив не будет отсортирован.
  8. Возвращаем отсортированный массив.

Заключение

Пузырьковая сортировка, хотя и не является самым эффективным алгоритмом для больших наборов данных из-за своей сложности O(n²), является отличным образовательным инструментом для понимания фундаментальных концепций сортировки. Благодаря своей простоте он идеально подходит для небольших списков и для учебных целей.

В нашей реализации на языке Python мы увидели, как можно использовать вложенные циклы для применения логики алгоритма и как простые замены могут привести к полностью отсортированному списку. Я надеюсь, что этот обзор пузырьковой сортировки поможет вам понять не только принцип ее работы, но и принципы, лежащие в основе многих других алгоритмов сортировки.

Перевод статьи «Bubblesort algorithm with Python».

Сообщение Алгоритм пузырьковой сортировки на Python появились сначала на pythonturbo.


Source: pythonturbo.ru

Как заработать на Python: превращаем код в золото

Привет, друзья! В сегодняшней статье мы рассмотрим 4 способа превращения кода в золото. То есть вкратце разберем, как заработать на знании Python.

1. Создание контента

Первый метод – это создание контента. Вы можете завести блог на Medium, WordPress или любой другой платформе. Это может стать вашим побочным или даже постоянным заработком. Просто предоставляйте качественный контент, и деньги придут.

Если не любите писать, можете создать канал на YouTube. Но помните, что контент – это король, а качественный контент привлекает больше людей.

2. Веб-разработка

Заработать на веб-разработке на Python – это самый быстрый способ получения дохода с помощью этого языка, так как спрос на услуги веб-разработчиков стабильно высокий. Вы можете создавать сайты и продавать их компаниям или частным лицам или предоставлять услуги по веб-разработке на таких фриланс-платформах, как Upwork, Fiverr и т.д.

3. Веб-скрапинг

На языке Python очень легко выполнять веб-скрапинг и это самый простой способ начать зарабатывать на нем как фрилансер. Вы можете изучить такие библиотеки, как beautifulsoup и requests, и начать зарабатывать деньги в Интернете.

Веб-скрапинг на Python выглядит следующим образом:

import requests
from bs4 import BeautifulSoup
import csv

file = []

country_list = ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'The Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Bhutan', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Bulgaria', 'Burkina Faso', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde', 'Central African Republic', 'Chad', 'China', 'Colombia', 'Democratic Republic of the Congo', 'Costa Rica', 'Croatia', 'Cuba', 'Denmark', 'Dominica', 'Dominican Republic', 'East Timor', 'Ecuador', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'Eswatini', 'Ethiopia', 'Finland', 'France', 'Gabon', 'The Gambia', 'Georgia (country)', 'Germany', 'Ghana', 'Grenada', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Republic of Ireland', 'Israel', 'Italy', 'Ivory Coast', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kiribati', 'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Liberia', 'Libya', 'Lithuania', 'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Marshall Islands', 'Mauritania', 'Mauritius', 'Federated States of Micronesia', 'Moldova', 'Monaco', 'Mongolia', 'Mozambique', 'Myanmar', 'Namibia', 'Nauru', 'Nepal', 'Kingdom of the Netherlands', 'New Zealand', 'Nicaragua', 'Nigeria', 'North Korea', 'North Macedonia', 'Norway', 'Oman', 'Pakistan', 'Palau', 'Panama', 'Papua New Guinea', 'Paraguay', 'Poland', 'Portugal', 'Qatar', 'Romania', 'Russia', 'Rwanda', 'Saint Kitts and Nevis', 'Saint Lucia', 'Saint Vincent and the Grenadines', 'Samoa', 'San Marino', 'São Tomé and Príncipe', 'Saudi Arabia', 'Senegal', 'Serbia', 'Sierra Leone', 'Singapore', 'Slovakia', 'Slovenia', 'Solomon Islands', 'Somalia', 'South Africa', 'South Korea', 'South Sudan', 'Spain', 'Sri Lanka', 'Sudan', 'Suriname', 'Switzerland', 'Syria', 'Tajikistan', 'Tanzania', 'Thailand', 'Tonga', 'Trinidad and Tobago', 'Tunisia', 'Turkmenistan', 'Tuvalu', 'Uganda', 'Ukraine', 'United Arab Emirates', 'United States', 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Venezuela', 'Vietnam', 'Zambia', 'Zimbabwe']
def main():
    for loop in country_list:
        page = requests.get(f"https://en.wikipedia.org/wiki/{loop}")
        src = page.content
        soup = BeautifulSoup(src,"html.parser")
        country_name = soup.find("span",class_="mw-page-title-main")
        if country_name:
            country_name = country_name.text.strip()
        country_flag = soup.find("a",class_="mw-file-description")
        if country_flag:
            country_flag ="https://en.wikipedia.org" + country_flag.get("href")
        country_capital = soup.find("td",class_="infobox-data").a
        if country_capital:
            country_capital = country_capital.text

        file.append({"Country Name":country_name,
                    "Country Capital":country_capital,
                    "Country Flag":country_flag,
                    })
        
        keys = file[0].keys()

    with open("Countries.csv","w",newline="",encoding="UTF-8") as f:
        writer = csv.DictWriter(f,keys)
        writer.writeheader()
        writer.writerows(file)
        print("File Created")

main()

4. Анализ данных с помощью Python

Да, вы можете стать аналитиком данных на Python, если вы хорошо владеете этим языком и любите работать с данными. Вы можете анализировать данные на Python для предприятий и частных лиц, помогая им принимать решения на основе данных. А можете и работать как фрилансер – в области анализа данных есть много возможностей.

Перевод статьи “Python Alchemy: 4 Ways to Turning Code into Gold”.

Сообщение Как заработать на Python: превращаем код в золото появились сначала на pythonturbo.


Source: pythonturbo.ru

Что такое “self” в Python?

В языке Python “self” обозначает сам объект класса. С его помощью можно получить доступ к атрибутам и методам класса.

Зеленый круг с надписью Class. Из него выходит и в него же возвращается синяя стрелка, подписанная как self.

Например, класс Fruit при создании присваивает себе пользовательские имя и цвет (name и color). Затем к ним можно будет получить доступ с помощью метода info():

class Fruit:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    
    def info(self):
        print(self.color, self.name)
    
banana = Fruit("Banana", "Yellow")
banana.info()

# Вывод:
# Yellow Banana

Чтобы понять, как это работает, давайте подробнее разберемся с “self” в Python. Это руководство предназначено для тех, кто уже знаком с классами, но кому понятие “self” кажется несколько туманным.

Ключевое слово “self” в Python

В Python класс – это схема для создания объектов.

Каждый объект Python является представителем некоторого класса. В Python объект также называется экземпляром класса. Если вы хотите создать объект в Python, у вас должен быть класс, на основе которого вы можете его создать.

Типичный класс Python состоит из методов, которые выполняют действия на основе атрибутов, присвоенных объекту.

Например, класс Weight может хранить килограммы и иметь возможность конвертировать их в фунты.

В классе Python параметр self ссылается на сам экземпляр класса. Это полезно, поскольку в противном случае не было бы возможности получить доступ к атрибутам и методам класса.

Пример: класс Fruit

Чтобы лучше понять роль “self” в классе, давайте рассмотрим простой класс Fruit. Он позволяет создавать объекты Fruit с пользовательскими именем и цветом (name и color):

class Fruit:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    
    def info(self):
        print(self.color, self.name)

Теперь вы можете создавать объекты Fruit. Делается это так:

banana = Fruit("Banana", "Yellow")
apple = Fruit("Apple", "Red")

И вы можете вывести информацию, связанную с ними:

banana.info()
apple.info()

Вывод:

Yellow Banana
Red Apple

Как работает “self” в этом примере?

Рассмотрим, как работает класс Fruit.

При создании нового объекта Fruit под капотом вызывается метод __init__. Он отвечает за создание объектов. Этот метод принимает три аргумента:

  1. self
  2. name
  3. color

При создании объекта Fruit метод __init__ вызывается с пользовательскими именем и цветом. Обратите внимание, что вам не нужно передавать self в качестве аргумента. Python делает это автоматически.

Таким образом, при вызове banana = Fruit("Banana", "Red"):

  • Метод __init__ начинает инициализацию объекта Banana с заданными аргументами name и color.
  • Он создает новые атрибуты self.name и self.color и сохраняет в них введенные данные name и color.
  • После этого можно получить доступ к атрибутам Banana name и color в любом месте объекта через self.name и self.color.

Посмотрим также, что произойдет при вызове banana.info().

Когда вы вызываете banana.info(), Python автоматически передает self в вызов метода в качестве аргумента. После этого метод info() может использовать self для доступа к атрибутам объекта name и color. Без self он не смог бы этого сделать.

В Python “self” может содержать что угодно

Зеленый круг Class. Внутрь круга, к слову self, ведут стрелки извне, от слов name, age, height, weight, sayHi(), showInfo(), add().

Ранее вы видели, как параметр self может использоваться для хранения атрибутов объектов.

Точнее, вы увидели типичный подход, когда вы передаете __init__ аргументы метода и присваиваете их self с помощью того же имени:

def __init__(self, name, color):
    self.name = name
    self.color = color

В связи с этим может возникнуть вопрос: “Должны ли имена аргументов совпадать с теми, что присваиваются self?”. Ответ – нет.

Подобно тому, как в Python можно создать любую переменную в любом месте, через self вы можете присвоить объекту любые атрибуты.

Это означает, что вы можете хранить в self любые значения с любыми именами. Их даже не обязательно передавать в качестве аргументов в метод __init__.

Пример: класс Point

Например, создадим класс Point, представляющий точку в трехмерном пространстве. Давайте инициализируем объекты Point в начале координат, не запрашивая координаты в качестве аргументов при инициализации.

Для этого необходимо присвоить xy и z значения 0 для self в методе __init__:

class Point:
    def __init__(self):
        self.x = 0
        self.y = 0
        self.z = 0

Теперь можно создавать объекты Point, привязанные к началу координат:

p = Point()
print(p.x, p.y, p.z)

# Вывод:
# 0 0 0 

Этим мы хотим продемонстрировать, как можно свободно добавлять любые атрибуты к свойству объекта self.

Может ли метод не иметь аргумента “self”?

В Python метод нуждается в аргументе self. В противном случае он не знает, к какому классу принадлежит, и не может выполнять над ним действия.

Чтобы посмотреть, что произойдет, если метод не будет принимать аргумент self , давайте пропустим его в методе info() :

class Fruit:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    
    def info():
        print(self.color, self.name)
banana = Fruit("Banana", "Yellow")
banana.info()

Вывод:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    banana.info()
TypeError: info() takes 0 positional arguments but 1 was given

Последняя строка говорит о том, что метод info() не принимает аргументов, а мы передали один. Но, судя по приведенному выше коду, мы не передавали никаких аргументов. Так почему же интерпретатор думает, что мы это сделали?

Даже если вы не передаете методу info() никаких аргументов,  Python автоматически пытается внедрить self в вызов. Это происходит потому, что Python знает, что для корректной работы все методы класса должны иметь ссылку на сам класс. Но в нашей реализации info() нет аргумента self. Поэтому передача в нее аргумента self за кулисами не удастся.

Это показывает, что в методах необходимо использовать аргумент self.

Доказательство того, что “self” относится к самому объекту

Для наглядности докажем, что self действительно относится к самому объекту.

Для этого проверим расположение в памяти self и объекта Fruit.

В языке Python адрес объекта в памяти можно проверить с помощью функции id(). Класс Fruit упрощен для облегчения восприятия.

class Fruit:
    def __init__(self):
        print("Self address =", id(self))
 
fruit = Fruit()
print("Object address =", id(fruit))

Вывод:

Self address = 140243905604576
Object address = 140243905604576

Как видно, адреса памяти одинаковы. Это говорит о том, что self внутри класса Fruit указывает на тот же адрес, что и объект fruit, который вы только что создали. Другими словами, параметр self действительно ссылается на сам объект.

Ключевое слово “self” не является зарезервированным в Python

Обратите внимание, что self не является зарезервированным ключевым словом в Python. Вместо него можно использовать любое имя, лишь бы оно было.

Зеленый круг, подписанный Class. Из него выходит и в него же возвращается синяя стрелка с рядом подписей на выбор: self, this, me, myself, whatever.

Например, изменим реализацию класса Fruit из предыдущих разделов. На этот раз вместо имени self будем использовать this:

class Fruit:
    def __init__(this, name, color):
        this.name = name
        this.color = color
    
    def info(this):
        print(this.color, this.name)
banana = Fruit("Banana", "Yellow")
apple = Fruit("Apple", "Red")

Этот код работает точно так же, как и тот, в котором используется self.

Но поскольку Python-разработчики чаще всего используют self, не рекомендуется использовать другие слова. При работе с классами в Python вы вряд ли столкнетесь с чем-то еще, кроме self.

Заключение

Сегодня вы узнали, что “self” делает в классе Python.

Напомним, что self в Python обозначает сам объект. Благодаря ему класс знает, как получить доступ к своим собственным атрибутам и методам.

При создании объекта вызывается метод __init__. В этом методе обычно присваиваются атрибуты экземпляру класса через self.

Обратите внимание, что “self” не является зарезервированным ключевым словом. Вместо него можно использовать любое другое слово, если передавать его в качестве первого аргумента для каждого метода класса. Однако  “self” настолько часто используется, что не следует использовать что-либо другое, даже если это возможно.

Спасибо, что прочитали. Надеюсь, вы нашли то, что искали. Удачного кодинга!

Перевод статьи «What Is ‘self’ in Python? A Complete Guide (with Examples)».

Сообщение Что такое “self” в Python? появились сначала на pythonturbo.


Source: pythonturbo.ru

Исправление ошибки ‘No such file or directory’ при установке пакетов

Введение

Частой ошибкой, которую вы можете получить при установке модулей Python, является ошибка ‘No such file or directory‘. Эти слова могут ввести в заблуждение, потому что обычно все файлы и каталоги из пакета, который вы пытаетесь установить находятся на своих местах. На самом деле, ошибка возникает из-за того, что Python пытается вызвать системный компилятор во время установки модуля, в то время как пути к нему закодированы в самом Python и он не находит нужные ему файлы. В этой статье будет приведен пример контекста получения ошибки и шаги по ее устранению на разных платформах.

Ошибки отсутствия компилятора

Пакеты Python обычно устанавливаются с помощью менеджера пакетов pip командой pip install. pip выведет список зависимостей, дополнительно требуемых выбранным вами пакетом, и длинный список результатов процесса установки. Иногда программа установки завершается с ошибкой, содержащей в конце вывода текст, подобный следующему:

Output
      x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.10 -I/usr/local/lib/python3.10/dist-packages/numpy/core/include -I/usr/include/python3.10 -c radiomics/src/_cmatrices.c -o build/temp.linux-x86_64-3.10/radiomics/src/_cmatrices.o
      error: command 'x86_64-linux-gnu-gcc' failed: No such file or directory
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> pyradiomics

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

Конкретно эта ошибка возникла в результате попытки установить pd-dwi с помощью pip install pd-dwi. Это библиотека Python, используемая в исследованиях химиотерапии.

Некоторые библиотеки Python, особенно те, которые используются для научных вычислений, после установки требуют компиляции дополнительного кода локально на вашей машине. Python – это интерпретируемый язык высокого уровня, который может работать только с интерпретатором Python. Языки низкого уровня, такие как C или Rust, которые иногда включаются в библиотеки Python для высокопроизводительной обработки, должны быть скомпилированы и оптимизированы, прежде чем стать исполняемыми. Если в вашей системе нет компилятора, установка завершится неудачно.

На большинстве современных платформ, когда вы устанавливаете менеджер пакетов Python, pip, он также устанавливает среду компилятора и соответствующие пакеты. Однако есть несколько причин, по которым этого может не произойти. Например, возможно, что компилятор был случайно удален или вообще не был установлен. И в отличие от Linux, на Mac или Windows пакеты Python обычно не устанавливаются системным менеджером пакетов, что может стать причиной возникновения проблем.

Следующие шаги этого руководства содержат инструкции по установке и проверке совместимого с Python компилятора на Ubuntu/Debian Linux, Red Hat/Rocky Linux, Windows и macOS.

Пакеты компиляторов для Ubuntu и Debian

На Ubuntu вы можете установить пакет build-essential, который предоставит все пакеты, необходимые для современной, хорошо поддерживаемой среды компилятора. build-essential – это так называемый мета-пакет. Он не относится к какому-то одному пакету, а скорее привлекает ряд общих инструментов компилятора в качестве зависимостей.

Вы также можете установить libpython3-dev. Это пакет экосистемы Ubuntu/Debian, который по сути “подключает” компилятор к Python и предоставляет всю необходимую конфигурацию бэкенда для автоматического вызова компилятора из Python или из pip. Обычно он устанавливается автоматически вместе с pip, но если вы устанавливаете pip без использования менеджера пакетов, он может отсутствовать.

Установите пакеты с помощью apt:

$ sudo apt install build-essential libpython3-dev

Это также приведет к установке ряда зависимостей. После этого вы можете убедиться в наличии компилятора, проверив существование команды make в вашей системе. Для этого используйте команду which:

$ which make

Output
/usr/bin/make

make – это команда, которую gcc, самый популярный компилятор с открытым исходным кодом, использует для разбора Makefile, то есть инструкции по компиляции, которые предоставляются в каждом пакете. Теперь, если make существует, попробуйте снова установить ваш модуль Python с помощью pip.

Пакеты компиляторов для Red Hat и Rocky Linux

В Red Hat и Rocky Linux вы можете использовать функцию groups менеджера пакетов dnf для установки пакетов, которые включают хорошо поддерживаемую среду компилятора. Группа пакетов, которую вы установите, называется “Development Tools”.

Для установки группы пакетов используйте две команды dnf:

$ sudo dnf groups mark install "Development Tools"
$ sudo dnf groupinstall "Development Tools"

Это также приведет к установке ряда зависимостей. Далее вы можете установить python3-devel, пакет экосистемы Red Hat, который по сути “подключает” компилятор к Python. python3-devel предоставляет всю необходимую конфигурацию бэкенда для автоматического вызова компилятора из Python или из pip:

$ sudo dnf install python3-devel

После этого вы можете убедиться, что компилятор доступен, проверив наличие команды make в вашей системе. Для этого используйте команду which:

$ which make

Output
/usr/bin/make

Если теперь make существует, попробуйте снова установить ваш модуль Python с помощью pip.

Среды компиляторов Windows

Проблемы с компилятором в Windows могут быть сложнее, поскольку существует множество различных способов установки Python, и каждый из них предполагает наличие различных компиляторов:

  • Если вы используете Python с WSL2, это то же самое, что запустить Python под Linux, поэтому вы можете следовать инструкциям по устранению неполадок для вашего дистрибутива (Ubuntu по умолчанию).
  • Если вы используете Python с Anaconda, то она предоставит свои собственные пакеты компилятора в среде conda, что обычно позволяет избежать подобных ошибок.
  • Если вы используете Python в Windows, есть несколько других решений. По умолчанию Python на Windows пытается использовать Microsoft Visual Studio Build Tools. Это очень большая установка, добавляющая множество пакетов экосистемы Windows, которые могут быть вам незнакомы, если вы в основном работаете в облаке, но они должны работать автоматически после установки, как make в Linux.
  • Если у вас уже есть рабочая версия gcc с открытым исходным кодом и инструменты сборки make, установленные в вашей среде Windows с помощью MinGW или Chocolatey, вы можете указать Python использовать этот компилятор, создав файл в Lib/distutils/distutils.cfg относительно пути установки Python и добавив следующее содержимое:
[build]
compiler=mingw32

[build_ext]
compiler=mingw32

Если у вас возникли проблемы с установкой компилятора в Windows, вы можете попробовать установить предварительно скомпилированный пакет wheel для устанавливаемой библиотеки, хотя это менее удобно, чем установка из pip. Кроме того, они обычно доступны только на разовой основе.

Среды компиляторов macOS

macOS включает инструментарий компилятора в пакете разработки Apple, XCode. Как и Visual Studio в Windows, XCode представляет собой полноценную среду разработки со своим собственным интерфейсом, но для компиляции пакетов Python вам не потребуется использовать сам XCode. Вместо этого вам нужно только убедиться, что пакеты XCode установлены. Это можно сделать, выполнив команду xcode-select -install:

$ xcode-select –install

Вам будет предложено начать установку, а затем принять лицензию на программное обеспечение. После этого инструменты будут загружены и установлены автоматически.

Заключение

Экосистема Python очень мощная, она приветлива как для начинающих, так и для опытных разработчиков, но столкновение с пробелами в ее инструментарии может сбить с толку. В этом руководстве вы узнали, как исправить ошибки, которые могут возникнуть в результате отсутствия пакетов компилятора, а также когда Python необходимо скомпилировать низкоуровневый код во время установки модуля.

Перевод статьи «How to Fix Python `No such file or directory` Compiler Errors When Installing Packages».

Сообщение Исправление ошибки ‘No such file or directory’ при установке пакетов появились сначала на pythonturbo.


Source: pythonturbo.ru