#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 спасибо за ваше подтверждение. Для моего варианта использования подойдет чтение файла.