GNU EMACS для технических писателей
285 subscribers
11 photos
19 files
87 links
Настройка, использование, хаки
Download Telegram
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
С аудиторией разобрались. 20% сидящих на Windows это много. Надеюсь, у вас там WSL2 и всё хорошо.

Вернёмся к 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