0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Рассказываем, как начинающему разработчику установить и управлять различными версиями Python с помощью Pyenv, подготовить свой проект и создать виртуальное окружение через Poetry.</strong></p>
1
<p><strong>Рассказываем, как начинающему разработчику установить и управлять различными версиями Python с помощью Pyenv, подготовить свой проект и создать виртуальное окружение через Poetry.</strong></p>
2
<p><em>Это адаптированный перевод статьи<a>Modern Python part 1: start a project with pyenv & poetry</a>Фаози Браза, специалиста по Data Engineer. Повествование ведётся от лица автора оригинала.</em></p>
2
<p><em>Это адаптированный перевод статьи<a>Modern Python part 1: start a project with pyenv & poetry</a>Фаози Браза, специалиста по Data Engineer. Повествование ведётся от лица автора оригинала.</em></p>
3
<p>Практически все начинающие разработчики сталкиваются с тем, что понимания синтаксиса у языка программирования и хороших инженерных практик недостаточно для того, чтобы начать программировать. Прежде, чем написать первую рабочую программу, нужно создать правильную среду разработки - такую, которая внедряет хорошие методы написания кода, повышает производительность и облегчает взаимодействие и коммуникацию проекте.</p>
3
<p>Практически все начинающие разработчики сталкиваются с тем, что понимания синтаксиса у языка программирования и хороших инженерных практик недостаточно для того, чтобы начать программировать. Прежде, чем написать первую рабочую программу, нужно создать правильную среду разработки - такую, которая внедряет хорошие методы написания кода, повышает производительность и облегчает взаимодействие и коммуникацию проекте.</p>
4
<p>Процесс создания пакетов и инструментарий для Python часто называют громоздким и сложным. В связи с этим в последние годы появилось несколько проектов с открытым исходным кодом, цель которых - облегчить управление пакетами Python в рамках ваших рабочих проектов. Здесь мы рассмотрим, как использовать два из них:<a>Pyenv</a>- для управления и установки различных версий Python, и<a>Poetry</a>- для управления пакетами и виртуальными окружениями.</p>
4
<p>Процесс создания пакетов и инструментарий для Python часто называют громоздким и сложным. В связи с этим в последние годы появилось несколько проектов с открытым исходным кодом, цель которых - облегчить управление пакетами Python в рамках ваших рабочих проектов. Здесь мы рассмотрим, как использовать два из них:<a>Pyenv</a>- для управления и установки различных версий Python, и<a>Poetry</a>- для управления пакетами и виртуальными окружениями.</p>
5
<p><em>Эта статья - первая из цикла, в котором рассказывается о лучших практиках современного Python. В этом цикле статей все примеры основаны на реализации простого проекта - он представляет собой функцию Python, которая суммирует данные, присутствующие в<a>pandas DataFrame</a>. Функция выводит количество строк и столбцов и частоту каждого типа данных, присутствующих в pandas DataFrame.</em></p>
5
<p><em>Эта статья - первая из цикла, в котором рассказывается о лучших практиках современного Python. В этом цикле статей все примеры основаны на реализации простого проекта - он представляет собой функцию Python, которая суммирует данные, присутствующие в<a>pandas DataFrame</a>. Функция выводит количество строк и столбцов и частоту каждого типа данных, присутствующих в pandas DataFrame.</em></p>
6
<h2>Содержание</h2>
6
<h2>Содержание</h2>
7
<ul><li><a>Подготовка</a></li>
7
<ul><li><a>Подготовка</a></li>
8
<li><a>Создание проекта</a></li>
8
<li><a>Создание проекта</a></li>
9
<li><a>Заключение</a></li>
9
<li><a>Заключение</a></li>
10
<li><a>Краткая памятка</a></li>
10
<li><a>Краткая памятка</a></li>
11
</ul><h2>Подготовка</h2>
11
</ul><h2>Подготовка</h2>
12
<h3>Установка pyenv</h3>
12
<h3>Установка pyenv</h3>
13
<p>Для установки pyenv вам потребуются некоторые зависимости, специфичные для вашей операционной системы. Они необходимы, поскольку pyenv устанавливает Python через сборку из исходного кода. Чтобы узнать о необходимых зависимостях для вашей ОС, прочитайте эту<a>документацию</a>. После установки зависимостей, вы можете установить pyenv. Для этого лучше использовать<a>pyenv-installer</a>, который автоматизирует процесс.</p>
13
<p>Для установки pyenv вам потребуются некоторые зависимости, специфичные для вашей операционной системы. Они необходимы, поскольку pyenv устанавливает Python через сборку из исходного кода. Чтобы узнать о необходимых зависимостях для вашей ОС, прочитайте эту<a>документацию</a>. После установки зависимостей, вы можете установить pyenv. Для этого лучше использовать<a>pyenv-installer</a>, который автоматизирует процесс.</p>
14
<p>После этого вы уже можете установить на свою систему любые версии Python. Узнать все доступные версии Python вы сможете через специальную команду:</p>
14
<p>После этого вы уже можете установить на свою систему любые версии Python. Узнать все доступные версии Python вы сможете через специальную команду:</p>
15
<p>В нашем случае мы установим классический CPython версий 3.7.10, 3.8.7, 3.9.2:</p>
15
<p>В нашем случае мы установим классический CPython версий 3.7.10, 3.8.7, 3.9.2:</p>
16
<p>После установки версий вы можете увидеть их, выполнив команду:</p>
16
<p>После установки версий вы можете увидеть их, выполнив команду:</p>
17
<p>Видно, что pyenv идентифицировал недавно установленные версии Python, и версию, установленную по умолчанию в вашей системе. Символ * перед system означает, что глобальная версия, используемая сейчас, является системной. pyenv позволяет управлять версиями Python на разных уровнях: глобально и локально. Допустим, мы собираемся установить версию 3.7.10 в качестве глобальной версии.</p>
17
<p>Видно, что pyenv идентифицировал недавно установленные версии Python, и версию, установленную по умолчанию в вашей системе. Символ * перед system означает, что глобальная версия, используемая сейчас, является системной. pyenv позволяет управлять версиями Python на разных уровнях: глобально и локально. Допустим, мы собираемся установить версию 3.7.10 в качестве глобальной версии.</p>
18
<p>Давайте еще раз посмотрим наши версии:</p>
18
<p>Давайте еще раз посмотрим наши версии:</p>
19
<p>Вы видите, что pyenv установил 3.7.10 в качестве нашей глобальной версии Python. Это не изменит операции, которые требуют использования системной версии. Путь, который вы можете прочитать между скобками, соответствует пути, который указывает на требуемую версию Python. pyenv перехватывает команды Python с помощью исполняемых файлов, введенных в ваш PATH, определяет, какую версию Python вам нужно использовать, и передает команды нужной версии Python. Не стесняйтесь читать полную<a>документацию</a>, чтобы лучше понять функциональность и возможности pyenv.</p>
19
<p>Вы видите, что pyenv установил 3.7.10 в качестве нашей глобальной версии Python. Это не изменит операции, которые требуют использования системной версии. Путь, который вы можете прочитать между скобками, соответствует пути, который указывает на требуемую версию Python. pyenv перехватывает команды Python с помощью исполняемых файлов, введенных в ваш PATH, определяет, какую версию Python вам нужно использовать, и передает команды нужной версии Python. Не стесняйтесь читать полную<a>документацию</a>, чтобы лучше понять функциональность и возможности pyenv.</p>
20
<p><em>Пусть вас не смущает семантика. Изменение глобальной версии не повлияет на вашу системную версию. Системная версия соответствует версии, используемой вашей ОС для выполнения определенных задач или запуска фоновых процессов, которые зависят от этой конкретной версии Python. Не меняйте системную версию на другую, иначе вы можете столкнуться с рядом проблем с вашей операционной системой! Эта версия обычно обновляется вместе с вашей ОС. Глобальная версия - это просто версия, которую pyenv будет использовать для глобального выполнения команд/программ Python.</em></p>
20
<p><em>Пусть вас не смущает семантика. Изменение глобальной версии не повлияет на вашу системную версию. Системная версия соответствует версии, используемой вашей ОС для выполнения определенных задач или запуска фоновых процессов, которые зависят от этой конкретной версии Python. Не меняйте системную версию на другую, иначе вы можете столкнуться с рядом проблем с вашей операционной системой! Эта версия обычно обновляется вместе с вашей ОС. Глобальная версия - это просто версия, которую pyenv будет использовать для глобального выполнения команд/программ Python.</em></p>
21
<h3>Установка poetry</h3>
21
<h3>Установка poetry</h3>
22
<p>poetry позволяет эффективно управлять зависимостями и пакетами в Python. Он выполняет ту же роль, что и setup.py или<a>pipenv</a>, но обладает большей гибкостью и функциональностью. Вы можете указать библиотеки, от которых зависит ваш проект, в файле pyproject.toml. После этого poetry установит или обновит их по вашему запросу. Кроме того, этот инструмент позволяет изолировать ваш рабочий проект в изолированное окружение. Наконец, вы можете использовать poetry для прямой публикации вашего пакета на<a>Pypi</a>.</p>
22
<p>poetry позволяет эффективно управлять зависимостями и пакетами в Python. Он выполняет ту же роль, что и setup.py или<a>pipenv</a>, но обладает большей гибкостью и функциональностью. Вы можете указать библиотеки, от которых зависит ваш проект, в файле pyproject.toml. После этого poetry установит или обновит их по вашему запросу. Кроме того, этот инструмент позволяет изолировать ваш рабочий проект в изолированное окружение. Наконец, вы можете использовать poetry для прямой публикации вашего пакета на<a>Pypi</a>.</p>
23
<p>Последним подготовительным шагом будет установка poetry путем выполнения команды:</p>
23
<p>Последним подготовительным шагом будет установка poetry путем выполнения команды:</p>
24
<h2>Создание проекта</h2>
24
<h2>Создание проекта</h2>
25
<p>Мы рассмотрим, как создать проект и изолировать его внутри окружения Python с помощью pyenv и poetry.</p>
25
<p>Мы рассмотрим, как создать проект и изолировать его внутри окружения Python с помощью pyenv и poetry.</p>
26
<h3>Установка версии Python с помощью pyenv</h3>
26
<h3>Установка версии Python с помощью pyenv</h3>
27
<p>Сначала создадим каталог с именем my_awesome_project и переместимся в него:</p>
27
<p>Сначала создадим каталог с именем my_awesome_project и переместимся в него:</p>
28
<p>Находясь внутри папки проекта, установите локальную версию Python, которую мы будем использовать (мы будем использовать Python 3.8.7). Это укажет poetry использовать локальную версию Python, определенную pyenv:</p>
28
<p>Находясь внутри папки проекта, установите локальную версию Python, которую мы будем использовать (мы будем использовать Python 3.8.7). Это укажет poetry использовать локальную версию Python, определенную pyenv:</p>
29
<p>Это создаст файл .python-version внутри нашего проекта. Этот файл будет прочитан pyenv и заставит его установить определенную локальную версию Python. В результате каждый каталог или файл, созданный после этого, будет зависеть от локальной версии Python, а не от глобальной.</p>
29
<p>Это создаст файл .python-version внутри нашего проекта. Этот файл будет прочитан pyenv и заставит его установить определенную локальную версию Python. В результате каждый каталог или файл, созданный после этого, будет зависеть от локальной версии Python, а не от глобальной.</p>
30
<h3>Создание проекта с помощью poetry</h3>
30
<h3>Создание проекта с помощью poetry</h3>
31
<p>Poetry предоставляет надежный CLI, позволяющий создавать, настраивать и обновлять ваш Python-проект и его зависимости. Для создания проекта Python используйте следующую команду:</p>
31
<p>Poetry предоставляет надежный CLI, позволяющий создавать, настраивать и обновлять ваш Python-проект и его зависимости. Для создания проекта Python используйте следующую команду:</p>
32
<p>Эта команда генерирует проект по умолчанию. Содержание нового проекта следующее:</p>
32
<p>Эта команда генерирует проект по умолчанию. Содержание нового проекта следующее:</p>
33
<p>. └── summarize_dataframe ├── README.rst ├── pyproject.toml ├── summarize_dataframe │ └── __init__.py └── tests ├── __init__.py └── test_summarize_dataframe.py</p>
33
<p>. └── summarize_dataframe ├── README.rst ├── pyproject.toml ├── summarize_dataframe │ └── __init__.py └── tests ├── __init__.py └── test_summarize_dataframe.py</p>
34
<p>Обратите внимание на файл pyproject.toml. Здесь мы определяем все метаданные нашего проекта, зависимости, скрипты и многое другое.</p>
34
<p>Обратите внимание на файл pyproject.toml. Здесь мы определяем все метаданные нашего проекта, зависимости, скрипты и многое другое.</p>
35
<p>Мы видим несколько разделов в нашем стандартном файле pyproject.toml.</p>
35
<p>Мы видим несколько разделов в нашем стандартном файле pyproject.toml.</p>
36
<ul><li>[tool.poetry]: Этот раздел содержит метаданные о нашем пакете. Вы можете поместить сюда название пакета, краткое описание, данные об авторе, версию вашего проекта и так далее. Все детали здесь необязательны, но будут необходимы, если вы решите опубликовать пакет на<a>Pypi</a>.</li>
36
<ul><li>[tool.poetry]: Этот раздел содержит метаданные о нашем пакете. Вы можете поместить сюда название пакета, краткое описание, данные об авторе, версию вашего проекта и так далее. Все детали здесь необязательны, но будут необходимы, если вы решите опубликовать пакет на<a>Pypi</a>.</li>
37
<li>[tool.poetry.dependencies]: Этот раздел содержит все необходимые зависимости для нашего пакета. Вы можете указать конкретные номера версий этих пакетов (packageX = "1.0.0") или использовать условные обозначения. Здесь также задается версия Python, которую мы хотим использовать в проекте. В нашем случае python = "^3.8" определяет минимальную версию, необходимую для работы нашего приложения. Здесь - Python 3.8, это основано нашей локальной версии, определенной с помощью pyenv.</li>
37
<li>[tool.poetry.dependencies]: Этот раздел содержит все необходимые зависимости для нашего пакета. Вы можете указать конкретные номера версий этих пакетов (packageX = "1.0.0") или использовать условные обозначения. Здесь также задается версия Python, которую мы хотим использовать в проекте. В нашем случае python = "^3.8" определяет минимальную версию, необходимую для работы нашего приложения. Здесь - Python 3.8, это основано нашей локальной версии, определенной с помощью pyenv.</li>
38
<li>[tool.poetry.dev-dependencies]: Этот раздел содержит все зависимости необходимые для разработки проекта. Тем не менее, эти зависимости не требуются для запуска приложения и не будут загружены при сборке пакета.</li>
38
<li>[tool.poetry.dev-dependencies]: Этот раздел содержит все зависимости необходимые для разработки проекта. Тем не менее, эти зависимости не требуются для запуска приложения и не будут загружены при сборке пакета.</li>
39
<li>[build-system]: Не трогайте этот раздел, если вы не обновили версию poetry.</li>
39
<li>[build-system]: Не трогайте этот раздел, если вы не обновили версию poetry.</li>
40
</ul><p><em>Вы можете посмотреть полный список доступных разделов для файла pyproject.toml<a>здесь</a>.</em></p>
40
</ul><p><em>Вы можете посмотреть полный список доступных разделов для файла pyproject.toml<a>здесь</a>.</em></p>
41
<h3>Установка и активация виртуального окружения</h3>
41
<h3>Установка и активация виртуального окружения</h3>
42
<p>Здесь есть два подхода: либо вы заранее знаете все необходимые вам зависимости и можете напрямую изменить файл pyproject.toml соответствующим образом, либо вы решаете добавить их позже, по мере необходимости. В нашем примере мы собираемся постепенно добавлять зависимости в процессе написания кода. Следовательно, нужно только инициализировать проект и создать виртуальное окружение. Для надо выполнить команду в директории вашего проекта:</p>
42
<p>Здесь есть два подхода: либо вы заранее знаете все необходимые вам зависимости и можете напрямую изменить файл pyproject.toml соответствующим образом, либо вы решаете добавить их позже, по мере необходимости. В нашем примере мы собираемся постепенно добавлять зависимости в процессе написания кода. Следовательно, нужно только инициализировать проект и создать виртуальное окружение. Для надо выполнить команду в директории вашего проекта:</p>
43
<p>Сначала создаётся виртуальное окружение. В нашем случае в папке проекта в директории .venv.</p>
43
<p>Сначала создаётся виртуальное окружение. В нашем случае в папке проекта в директории .venv.</p>
44
<p><em>Вы можете создать виртуальное окружение в любых других каталогах. Для этого вам нужно отредактировать конфигурацию poetry. Для получения более подробной информации следуйте этой<a>документации</a>.</em></p>
44
<p><em>Вы можете создать виртуальное окружение в любых других каталогах. Для этого вам нужно отредактировать конфигурацию poetry. Для получения более подробной информации следуйте этой<a>документации</a>.</em></p>
45
<p>Затем, poetry прочитает файл pyproject.toml и установит все зависимости, указанные в этом файле. Если версии зависимостей не определены, poetry загрузит последнюю версию пакетов. В конце операции создается файл poetry.lock. Он содержит все пакеты и их точные версии. Помните, что если файл poetry.lock уже существует, то номера версий, определенные в нем, имеют приоритет над теми, что определены в файле pyproject.toml. Наконец, вы должны сохранить файл poetry.lock в репозитории проекта, чтобы все участники, работающие над проектом, использовали одинаковые версии зависимостей.</p>
45
<p>Затем, poetry прочитает файл pyproject.toml и установит все зависимости, указанные в этом файле. Если версии зависимостей не определены, poetry загрузит последнюю версию пакетов. В конце операции создается файл poetry.lock. Он содержит все пакеты и их точные версии. Помните, что если файл poetry.lock уже существует, то номера версий, определенные в нем, имеют приоритет над теми, что определены в файле pyproject.toml. Наконец, вы должны сохранить файл poetry.lock в репозитории проекта, чтобы все участники, работающие над проектом, использовали одинаковые версии зависимостей.</p>
46
<p>Теперь давайте активируем среду, которую мы только что создали, с помощью следующей команды:</p>
46
<p>Теперь давайте активируем среду, которую мы только что создали, с помощью следующей команды:</p>
47
<p>Команда создает дочерний процесс, который наследует от родительского Shell, но не изменяет свое окружение. Она изолирует и защищает любые изменения, которые вы будете вносить в среду проекта.</p>
47
<p>Команда создает дочерний процесс, который наследует от родительского Shell, но не изменяет свое окружение. Она изолирует и защищает любые изменения, которые вы будете вносить в среду проекта.</p>
48
<h3>Создание репозитория git</h3>
48
<h3>Создание репозитория git</h3>
49
<p>На последнем этапе мы создадим git-репозиторий, добавим файлы README.md и .gitignore и перенесем все в наш удаленный репозиторий.</p>
49
<p>На последнем этапе мы создадим git-репозиторий, добавим файлы README.md и .gitignore и перенесем все в наш удаленный репозиторий.</p>
50
<h2>Заключение</h2>
50
<h2>Заключение</h2>
51
<p>Здесь мы рассмотрели, как устанавливать и управлять различными версиями Python на нашей машине с помощью pyenv. Мы продемонстрировали, как использовать pyenv local для установки определенной версии Python в вашем проекте, а затем создать виртуальное окружение с помощью poetry. Использование poetry значительно упрощает процесс создания проекта, предлагая простые и разнообразные средства для его настройки. Кроме того, он включает минимальные требования к системе сборки, как определено в<a>PEP 518</a>.</p>
51
<p>Здесь мы рассмотрели, как устанавливать и управлять различными версиями Python на нашей машине с помощью pyenv. Мы продемонстрировали, как использовать pyenv local для установки определенной версии Python в вашем проекте, а затем создать виртуальное окружение с помощью poetry. Использование poetry значительно упрощает процесс создания проекта, предлагая простые и разнообразные средства для его настройки. Кроме того, он включает минимальные требования к системе сборки, как определено в<a>PEP 518</a>.</p>
52
<h2>Краткая памятка</h2>
52
<h2>Краткая памятка</h2>
53
<h3>pyenv</h3>
53
<h3>pyenv</h3>
54
<ul><li><em>Посмотреть все доступные для установки версии Python</em></li>
54
<ul><li><em>Посмотреть все доступные для установки версии Python</em></li>
55
</ul><p>pyenv install --list</p>
55
</ul><p>pyenv install --list</p>
56
<ul><li><em>Установить глобальную версию Python</em></li>
56
<ul><li><em>Установить глобальную версию Python</em></li>
57
</ul><p>pyenv global</p>
57
</ul><p>pyenv global</p>
58
<ul><li><em>Установить локальную версию Python</em></li>
58
<ul><li><em>Установить локальную версию Python</em></li>
59
</ul><p>pyenv local</p>
59
</ul><p>pyenv local</p>
60
<h3>poetry</h3>
60
<h3>poetry</h3>
61
<ul><li><em>Создать проект</em></li>
61
<ul><li><em>Создать проект</em></li>
62
</ul><p>poetry new</p>
62
</ul><p>poetry new</p>
63
<ul><li><em>Установить основные зависимости и создать виртуальное окружение</em></li>
63
<ul><li><em>Установить основные зависимости и создать виртуальное окружение</em></li>
64
</ul><p>poetry install</p>
64
</ul><p>poetry install</p>
65
<ul><li><em>Активировать виртуальное окружение</em></li>
65
<ul><li><em>Активировать виртуальное окружение</em></li>
66
</ul><p>poetry shell</p>
66
</ul><p>poetry shell</p>