При написании кода на VSC мне часто приходится использовать терминал в виртуальной среде, которую я использую в данный момент.
Проблема в том, что каждый раз, когда я захожу в «Новый терминал», мне нужно активировать виртуальную среду, необходимую для этого конкретного сеанса. Обычно я переключаюсь между виртуальными средами несколько раз в день, поэтому ищу способ сэкономить время.
Должно быть, я плохо использую функции VSC, должен быть лучший способ (профили? или какое-то расширение?), но сейчас я делаю это именно так:
У меня есть сценарий bash, который активирует virtualenv, а затем вызывает VSC. Но это не работает все время, я точно не знаю, почему (иногда «Новый терминал» приводит к полному отсутствию virtualenv, а иногда он все еще находится в последнем использованном virtualenv.
Скрипт (см. в конце сообщения) связан с ключом и путем, передаваемыми в качестве параметра. Например, я нажимаю CTRL+SHIFT+D, чтобы выполнить сценарий, который активирует мою ежедневную тестовую среду.
Итак, вопрос в том, есть ли простой способ открыть VSC с уже активированным виртуальным окружением, чтобы мне не приходилось активировать его каждый раз, когда я запускаю «Новый терминал» VSC?
Примечание. Я не хочу связывать виртуальную среду с конкретным проектом, файлом, рабочей областью или репозиторием, а хочу связать ее с сеансом (под этим я имею в виду, что каждый раз, когда я открываю VSC, я буду использовать ее в одной конкретной виртуальной среде. Если мне нужен другой виртуальный файл). , я просто закрываю VSC и снова открываю его с помощью приведенного ниже сценария, используя другую виртуальную среду).
Редактировать 0: сценарий не работает, потому что он (ошибочно) предполагает следующее: если я активирую virtualenv, а затем вызываю VSC, «новый терминал» VSC откроется в активном виртуальном окружении во время вызова VSC. Это не так. Не имеет значения, вызываю ли я VSC с терминала, который только что активировал виртуальную среду или вообще не активировал виртуальную среду. VSC не заботится/не знает, какой virtualenv был активирован перед вызовом VSC.
Это скрипт, выполняемый при нажатии CTRL+SHIFT+D:
#!/bin/bash
echo -------------------------- virtualenv: daily tests --------------------------
echo "changing to path: $1"
cd $1
echo -------------------------- Activate VirtualEnv --------------------------
echo Activate Virtual Environment at:
echo /home/user/.virtualenvs/VirtEnvRG001_daily_tests/bin/activate
source /home/user/.virtualenvs/VirtEnvRG001_daily_tests/bin/activate
echo Wait 1 s
sleep 1
echo Calling VSC...
code $1
Благодаря ответу White Owl я добавил профили в файл конфигурации, и теперь он работает так, как задумано. Теперь я просто открываю нужный профиль в терминале, и мне не нужно каждый раз активировать virtualenv.
Ниже приведена именно та часть, которую я добавил к settings.json
:
"terminal.integrated.profiles.linux": {
"Geo": {
"path": "/usr/bin/bash",
"args": ["--init-file", "/home/user/.virtualenvs/geo/bin/activate"]
},
"Daily": {
"path": "/usr/bin/bash",
"args": ["--init-file", "/home/user00/.virtualenvs/daily/bin/activate"]
}
},
"terminal.integrated.defaultProfile.linux": "Daily"
Вы читали документацию? Среды Python в VS Code. В частности: «Выберите и активируйте среду… Выбранная среда используется расширением Python для… открытия терминала… VS Code автоматически активирует выбранную среду [если вы] не добавите "python.terminal.activateEnvironment": false
в свой settings.json
»
Связано: Автоматическая активация виртуальной среды в Visual Studio Code. Другие вопросы можно найти, погуглив «vscode автоматически активирует venv».
@wjandrea ты читал ОП? Я не хочу активировать virtualenv для данной папки/рабочей области. И я не ищу, как автоматически активировать венв.
Ну, я не понимаю, почему вы пытаетесь использовать VSC таким образом. Как я уже сказал, он не предназначен для этого. (Вот почему я первым задал этот вопрос.) Если вы дадите некоторую предысторию, это поможет мне понять основную проблему, которую вы пытаетесь решить. Если это поможет понять, откуда я, посмотрите Задача XY.
Здравствуйте, дает ли эффект попытка использовать описанный файл скрипта? Или попробовать метод, описанный в ответе, чтобы добиться желаемого эффекта?
@wjandrea да, возможно, я «неправильно использую» VSC, и я признаю, что, возможно, мне нужно изменить свою точку зрения (я открыт для этого). Понятие рабочего пространства мне не подходит. Предположим, у вас есть два совершенно разных задания по программированию (каждое из которых содержит несколько проектов, папок и т. д.), и каждое задание имеет свою собственную, очень разную и несовместимую виртуальную среду. Как бы вы поступили с этим?
@Jeanneli, скрипт не работает, я добавил это в ОП.
Да, это делается с помощью профиля терминала. Читайте здесь: https://code.visualstudio.com/docs/terminal/profiles
вы бы определили профиль следующим образом:
{
"terminal.integrated.profiles.windows": {
"MyTerminal": {
"path": "/usr/bin/bash",
"args": [
"--init-file",
"/home/user/.virtualenvs/VirtEnvRG001_daily_tests/bin/activate"
]
}
},
"terminal.integrated.defaultProfile.windows": "MyTerminal"
}
Добавьте это в свой settings.json
. И это заставит указанный скрипт запускаться каждый раз при открытии нового терминала.
да! Это работает. И я даже могу назначить ему комбинацию клавиш!!
Что вы используете VSC для сеансов? Он создан для работы для каждого проекта/репозитория (точнее, рабочей области), а не для каждого сеанса.