Откройте VSCode в определенной виртуальной среде

При написании кода на 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"

Что вы используете VSC для сеансов? Он создан для работы для каждого проекта/репозитория (точнее, рабочей области), а не для каждого сеанса.

wjandrea 19.08.2024 20:18

Вы читали документацию? Среды Python в VS Code. В частности: «Выберите и активируйте среду… Выбранная среда используется расширением Python для… открытия терминала… VS Code автоматически активирует выбранную среду [если вы] не добавите "python.terminal.activateEnvironment": false в свой settings.json»

wjandrea 19.08.2024 20:22

Связано: Автоматическая активация виртуальной среды в Visual Studio Code. Другие вопросы можно найти, погуглив «vscode автоматически активирует venv».

wjandrea 19.08.2024 20:27

@wjandrea ты читал ОП? Я не хочу активировать virtualenv для данной папки/рабочей области. И я не ищу, как автоматически активировать венв.

terauser 19.08.2024 20:35

Ну, я не понимаю, почему вы пытаетесь использовать VSC таким образом. Как я уже сказал, он не предназначен для этого. (Вот почему я первым задал этот вопрос.) Если вы дадите некоторую предысторию, это поможет мне понять основную проблему, которую вы пытаетесь решить. Если это поможет понять, откуда я, посмотрите Задача XY.

wjandrea 19.08.2024 21:23

Здравствуйте, дает ли эффект попытка использовать описанный файл скрипта? Или попробовать метод, описанный в ответе, чтобы добиться желаемого эффекта?

Jeanneli 20.08.2024 11:44

@wjandrea да, возможно, я «неправильно использую» VSC, и я признаю, что, возможно, мне нужно изменить свою точку зрения (я открыт для этого). Понятие рабочего пространства мне не подходит. Предположим, у вас есть два совершенно разных задания по программированию (каждое из которых содержит несколько проектов, папок и т. д.), и каждое задание имеет свою собственную, очень разную и несовместимую виртуальную среду. Как бы вы поступили с этим?

terauser 20.08.2024 12:49

@Jeanneli, скрипт не работает, я добавил это в ОП.

terauser 20.08.2024 12:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, это делается с помощью профиля терминала. Читайте здесь: 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. И это заставит указанный скрипт запускаться каждый раз при открытии нового терминала.

да! Это работает. И я даже могу назначить ему комбинацию клавиш!!

terauser 20.08.2024 13:29

Другие вопросы по теме