Есть задача запустить одну(!) команду в контексте python’овского virtual environment, и вернуться обратно в нормальный контекст
(Дислаймеры: Одну команду. Одной башевской командой, запустить одну башевскую команду в том контексте и вернуться обратно. Как sudo ls
. Нет, заходить в venv мне не надо, не предлагайте. Писать обертки которая зайдет и выйдет тоже не подходит.)
Пока рабочие варианты у меня
bash -c 'source ~/.venv/bin/activate; export'
или
(cat ~/.venv/bin/activate ; echo "export" ) | bash
которые по сути те же обертки только в одну строку. Команда export
приведена для примера. По ее выводу можно определить что она отработала внутри venv’а.
Есть ли какие-то более прямые способы, или в питоне все так и должно быть через одно место, и с эти надо смириться?
Update: правильный ответ от firkax
( . ~/.venv/bin/activate ; export )