Доступ к переменным ENV, определенным в файлах $ {workspaceFolder} /.env

#python-3.x #visual-studio-code #vscode-extensions

#python-3.x #visual-studio-code #vscode-расширения

Вопрос:

Для проекта мне нужно определить переменную ENVIRO (и некоторые другие) со значениями prod / stage / dev. Эта переменная используется в .devcontainer/docker-compose.yml, .devcontainer/ Dockerfile, некоторых сценариях оболочки и исходном коде Python для задания путей и тому подобного.

Поэтому я определил файл $ {workspaceFolder} /.env, который импортируется расширением Python, как описано здесь:

 ENVIRO=dev
...
 

Чтобы избежать выполнения / отладки моего кода в неправильной среде, я хотел создать небольшое расширение VSC, которое не делает ничего, кроме отображения значения переменной ENVIRO в строке состояния внизу.

Теперь проблема. В функции активации расширений я не получаю доступ к переменным ENV, определенным в файле .env:

 const envValue = process.env["ENVIRO"];
// gives: undefined
 

В терминале в том же экземпляре VSC:

 echo $ENVIRO
# gives: dev
 

Когда я обращаюсь к переменным ENV, определенным системой (не к файлу .env), нет проблем с доступом к ним в функции активации расширения:

 export function activate( context: vscode.ExtensionContext) {
  const envValue = process.env["NVM_BIN"];
  // gives: '/Users/andi/.nvm/versions/node/v14.15.1/bin'
 

Нет ли способа получить доступ к этой переменной?

Мое подозрение заключается в следующем:

  • Расширение Python расширяет среду переменными, используя EnvironmentVariableCollection
  • Это добавляет их в среду терминала, но предотвращает доступ к переменным в других расширениях.

Или я (надеюсь) что-то пропустил?

Комментарии:

1. у вас есть доступ только к среде оболочки, из которой запускается VSC, расширение Python запускает новую оболочку, расширения не имеют доступа к этой оболочке. Вы можете получить содержимое, прочитав .env файл самостоятельно, но это, возможно, не отражает значение в новой используемой оболочке

2. @rioV8 спасибо за ваше подтверждение. Для моего варианта использования подойдет чтение файла.