Pyvenv
Это пакет, используемый для управления виртуальными окружениями Python. Если вы не знаете, что это такое, то самое время почитать описание модуля venv.
Примечание: в большинстве Linux-дистрибутивов этот модуль нужно ставить вручную. Например, так выглядит команда установки в Debian:
Я рекомендую создавать виртуальные окружения в корневом каталоге проекта и давать им имя
1. Активировать окружение и запустить Emacs из командной строки.
2. Использовать команду
#python #pyvenv
Это пакет, используемый для управления виртуальными окружениями Python. Если вы не знаете, что это такое, то самое время почитать описание модуля venv.
Примечание: в большинстве Linux-дистрибутивов этот модуль нужно ставить вручную. Например, так выглядит команда установки в Debian:
sudo apt update && sudo apt install python3-venvВы установили модуль
venv
. Чтобы создать виртуальное окружение, используйте следующую команду:python3 -m venv <env_name>где
<env_name>
— имя виртуального окружения и одновременно имя каталога, в котором оно будет храниться.Я рекомендую создавать виртуальные окружения в корневом каталоге проекта и давать им имя
.env
. В этом случае указанная команда выглядит так:python3 -m venv .envДля активации окружения следует использовать следующую команду:
source <env_name>/bin/activateЗаставить Emacs работать с указанным окружением можно разными способами.
1. Активировать окружение и запустить Emacs из командной строки.
2. Использовать команду
pyvenv-activate
, предоставляемую пакетом pyvenv
. В этом случае нужно будет указать путь к каталогу, в котором хранятся файлы виртуального окружения. Для примера выше это каталог .env/
в корне проекта.#python #pyvenv
Python documentation
venv — Creation of virtual environments
Source code: Lib/venv/ The venv module supports creating lightweight “virtual environments”, each with their own independent set of Python packages installed in their site directories. A virtual en...
С аудиторией разобрались. 20% сидящих на Windows это много. Надеюсь, у вас там WSL2 и всё хорошо.
Вернёмся к Emacs. Он не существует как сферический конь в вакууме сам по себе, а работает с теми переменными, которые заданы на уровне окружения. Например, переменная
Когда вы переходите в какой-нибудь каталог и открываете файл, Emacs по-прежнему знает про переменные окружения. Самая важная из них —
Если путь к каталогу с исполняемым файлом линтера не входит в
Emacs пишет:
Это потому, что Sphinx установлен в виртуальном окружении, про которое Emacs ничего не знает.
Виртуальное окружение, как правило, активируется с помощью этой команды:
Эта команда добавляет в
Вы вызываете команду:
Bundler заполняет переменные окружения нужными значениями, а уже потом запускает
THE BAD
Установите
Возможно, это даже не сломает вашу систему. А может быть сломает. Разработчики Debian запретили установку и обновление системных пакетов Python с помощью PIP. Думаю, скоро настанет и очередь Ruby.
THE UGLY
Используйте пакет
THE GOOD
Установите в систему утилиту direnv. А вот как её использовать, и при чём тут Emacs — тема отдельного поста.
#direnv #ruby #python
Вернёмся к Emacs. Он не существует как сферический конь в вакууме сам по себе, а работает с теми переменными, которые заданы на уровне окружения. Например, переменная
HOME
. В *nix-системах это путь к домашнему каталогу. В Windows по умолчанию такой переменной нет, и Emacs вынужден подставить туда хоть что-то. По умолчанию — путь к каталогу с профилем. Ну, вот этот вот, типа C:\Users\mdunaevsky\AppData\Roaming
. Не очень красивое название, правда? Мне больше нравится D:\dunaevsky
. Впрочем, вы можете создать эту переменную сами в настройках ОС.Когда вы переходите в какой-нибудь каталог и открываете файл, Emacs по-прежнему знает про переменные окружения. Самая важная из них —
PATH
. Она хранит список каталогов, в которых нужно выполнять поиск при запуске команд. В Windows эта переменная тоже есть. Поэтому, когда вы смотрите статус Flycheck, то видите там те пути к своим линтерам, которые Emacs смог найти в каталогах, указанных в PATH
.Если путь к каталогу с исполняемым файлом линтера не входит в
PATH
, Emacs (точнее, Flycheck), не сможет использовать его. Разумеется, другие команды тоже не будут работать. Вы вызываете projectile-build-command
:make dirhtml
Emacs пишет:
sphinx-build not found
Это потому, что Sphinx установлен в виртуальном окружении, про которое Emacs ничего не знает.
Виртуальное окружение, как правило, активируется с помощью этой команды:
source .venv/bin/activate
Эта команда добавляет в
PATH
нужные пути, и делает много какой другой работы. Когда вы активируете окружение, то получаете настроенные переменные окружения. Это работает не только с Python. Например, утилита Bundler из мира Ruby делает то же самое: заполняет переменные окружения нужными значениями.Вы вызываете команду:
bundle exec asciidoctor-pdf ...
Bundler заполняет переменные окружения нужными значениями, а уже потом запускает
asciidoctor-pdf
. Вот только использовать его совместно с Flycheck в этом случае не получится, я проверял. Нужно что-то другое.THE BAD
Установите
asciidoctor
в системное окружение с помощью команды:gem install asciidoctor
Возможно, это даже не сломает вашу систему. А может быть сломает. Разработчики Debian запретили установку и обновление системных пакетов Python с помощью PIP. Думаю, скоро настанет и очередь Ruby.
THE UGLY
Используйте пакет
asciidoctor
, входящий в состав дистрибутива. Скорее всего, там будет какое-нибудь старьё, но этот способ даёт хоть какой-то контроль над происходящим.THE GOOD
Установите в систему утилиту direnv. А вот как её использовать, и при чём тут Emacs — тема отдельного поста.
#direnv #ruby #python
👍1