Как активировать virtualenv активировать в скрипте Bash

Как создать скрипт Bash для активации виртуального виртуального Python?

У меня есть структура каталогов, такая как:

.env bin activate ...other virtualenv files... src shell.sh ...my code... 

Я могу активировать свой virtualenv:

 user@localhost:src$ . ../.env/bin/activate (.env)user@localhost:src$ 

Однако делать то же самое из сценария Bash ничего не делает:

 user@localhost:src$ cat shell.sh #!/bin/bash . ../.env/bin/activate user@localhost:src$ ./shell.sh user@localhost:src$ 

Что я делаю не так?

5 Solutions collect form web for “Как активировать virtualenv активировать в скрипте Bash”

Когда вы используете источник, вы загружаете скрипт активации в свою активную оболочку.

Когда вы делаете это в скрипте, вы загружаете его в ту оболочку, которая завершается, когда ваш скрипт заканчивается, и вы вернетесь в свою оригинальную, неактивированную оболочку.

Ваш лучший вариант – сделать это в функции

 activate () { . ../.env/bin/activate } 

или псевдоним

 alias activate=". ../.env/bin/activate" 

Надеюсь это поможет.

Хотя он не добавляет префикс «(.env)» в приглашение оболочки, я обнаружил, что этот скрипт работает так, как ожидалось.

 #!/bin/bash script_dir=`dirname $0` cd $script_dir /bin/bash -c ". ../.env/bin/activate; exec /bin/bash -i" 

например

 user@localhost:~/src$ which pip /usr/local/bin/pip user@localhost:~/src$ which python /usr/bin/python user@localhost:~/src$ ./shell user@localhost:~/src$ which pip ~/.env/bin/pip user@localhost:~/src$ which python ~/.env/bin/python user@localhost:~/src$ exit exit 

Вы должны вызвать скрипт bash с использованием источника.

Вот пример:

 #!/bin/bash # Let's call this script venv.sh source "<absolute_path_recommended_here>/.env/bin/activate" 

На вашей оболочке просто назовите это так:

 > source venv.sh 

Или как @outmind предложил:

 > . venv.sh 

Там вы, указатель оболочки будет помещен в ваш запрос.

Sourcing запускает команды оболочки в вашей текущей оболочке. Когда вы находитесь внутри скрипта, как вы делаете выше, вы воздействуете на среду для этого сценария, но когда сценарий завершается, изменения в среде отменены, так как они эффективно выходят за рамки.

Если вы намерены запускать команды оболочки в virtualenv, вы можете сделать это в своем скрипте после поиска сценария активации. Если вы намерены взаимодействовать с оболочкой внутри virtualenv, тогда вы можете создать подстроку внутри вашего скрипта, которая наследует среду.

Для чего нужен скрипт bash?

  1. Если вы собираетесь переключаться между несколькими виртуальными виртуальными машинами или быстро вводить один virtualenv, попробуйте ли вы virtualenvwrapper ? Он предоставляет множество workon venv , mkvirtualenv venv как workon venv , mkvirtualenv venv и т. Д.

  2. Если вы просто запускаете скрипт python в определенном virtualenv, используйте /path/to/venv/bin/python script.py для его запуска.

  • Установка python3 в виртуальной среде python2
  • django postgres не удалось подключиться к серверу
  • Python не может найти distutils_path на Mac OSX
  • django-admin.py и virtualenv проблема в Windows
  • Ошибка импорта не может импортировать имя execute_manager в среде Windows
  • Python, PIL и JPEG на Heroku
  • Ошибка установки Matplotlib с помощью virtualenv
  • Почему virtualenv не создает папку DLL?
  •  
    Interesting Posts for Van-Lav

    как преобразовать список списков в набор в python, чтобы я мог сравнивать с другими наборами?

    Проверьте, содержит ли Список объектов объект с определенным значением атрибута

    Переименование нескольких файлов в папке python таблицы Excel

    Добавление вектора рисования

    Pythonic способ решения круговых операторов импорта?

    Можем ли мы использовать переменную python для хранения всего файла?

    python – почему свойство read-only доступно для записи?

    эффективный способ подсчета элемента в словаре в Python с использованием цикла

    Возьмите пересечение произвольного количества списков в python

    Никаких обработчиков для логгера paramiko

    Несколько копий инструментария py.test

    datetime и timezone с pytz-mind blowing behavior

    Ошибка в python, csv и mysql: Ошибка: 1054 (42S22): Неизвестный столб 'nan' в 'списке полей'

    Тархан сильно связанными компонентами в python не работает

    Python: невозможно наследовать от расширения C

    Python - лучший язык программирования в мире.