Как активировать virtualenv в рамках сценария удара, приводящего к активированной подсказке

Я хочу сценарий, который настроит мои инструменты, но также и сохранять виртуальную среду в целости для моей подсказки. Но, поскольку heemayl указывает ниже, сценарий оболочки при выполнении, выполнения в подоболочке и всех параметрах и среда выходит из объема, после того как выполнение завершается. Теперь я думаю, лучший способ состоял бы в том, чтобы открыть новое окно терминала из сценария и иметь сценарий, "отправляют" a source activate управляйте к новому терминалу. Больше деталей следует, но есть ли способ настроить мои инструменты и оставить меня в виртуальной огибающей подсказке?

При первом начале работы над многими моими проектами, а именно, те, которые используют Django, я запустил бы тот же путь. Это превратилось в сценарий, ниже.

#!/bin/bash
#0 cd into project
cd $WSGI

#1. Load the virtual env
. /path/to/virtualenvs/django1-8-py-3/bin/activate

#2. Open spyder or other IDEs
spyder3 &

#3. Run an interactive shell that runs the development server i.e.

ipython -m pdb manage.py runserver

Это хорошо работает, пока я не должен выпадать из ipython и в активированный удар. Поскольку сценарий выше завершился после того, как ipython завершен, я брошен в плоскость ol оболочка. Но то, что я хочу, должно видеть подсказку т.е. (virtualenv) me@mine:~ $, как будто я работал source activate команда а не сценарий выше.

Это пахнет как проблема XY, я знаю. Но без контекста я боялся, что мой вопрос будет неясен. Я спрашиваю, как сделать сценарий, который, в конце его, предоставляет мне терминал моим virtualenv. Да, я мог просто, делать это:

source acitvate
run my script
when done in ipython I'm still in virtual env

Возможное решение

Могу я, возможно, использовать сценарий оболочки для открытия нового окна терминала, я думаю, там, возможно, путь к:

do the steps in my script first
then open a new terminal window
run activate in this window

... приводя к двум вкладкам/окнам, та, которая выполняет ipython и другой, находится в ударе virtualenv (таким образом, я могу, например, выполнить команды manage.py, не останавливаясь ipython).

4
задан 18 August 2016 в 22:19

4 ответа

Сценарий оболочки при выполнении, выполнения в подоболочке и всех параметрах и среде выходит из объема, после того как выполнение завершается.

Для предоставления доступа к среде доступной на текущей сессии оболочки Вам нужно к source это:

source /path/to/script.sh

Как примечание стороны, если Вы хотите, чтобы некоторый процесс блокирования продолжал работать в фоновом режиме, при восстановлении доступа к терминальной подсказке отправьте процесс в фон:

some_command_to_run_in_background &
3
ответ дан 1 December 2019 в 09:13

Можно использовать venv, не активируя его.

необходимо указать полный путь к интерпретатору Python в venv плюс полный путь к программе, которую Вы хотите запустить, который находится также в venv.

Как пример, см. этот резервный сценарий, который выполняет Amazon aws команда CLI, установленная в venv, выполненный из сценария оболочки:

NOW=$(date +"%F-%H:%M:%S")
BACKUP_FILENAME="pg-dumpall-foo-$NOW.zip"
SCHEMA_FILENAME="pg-schema-foo-$NOW.zip"

cd ~
mkdir -p backup_tmp
cd backup_tmp
find . -type f -mmin +360 -delete
pg_dumpall -U postgres -h localhost | /bin/gzip -9 > $BACKUP_FILENAME
pg_dump -U postgres -h localhost -s foo  | /bin/gzip -9 > $SCHEMA_FILENAME
echo saving $BACKUP_FILENAME to s3
/opt/foo/venv3.6/bin/python /opt/foo/venv3.6/bin/aws s3 cp $BACKUP_FILENAME s3://foobackups/
echo saving $SCHEMA_FILENAME to s3
/opt/foo/venv3.6/bin/python /opt/foo/venv3.6/bin/aws s3 cp $SCHEMA_FILENAME s3://foobackups/
0
ответ дан 1 December 2019 в 09:13

Это не то, что Вы попросили, но я думаю, что это могло бы помочь Вам.

самый легкий способ активировать виртуальную среду отовсюду:

Примечание Разработчика:-Вы должно создать весь Ваш virtualenv в одной папке, такой как virt.

Принятие Вашего virtualenv имени папки virt (если не изменяются, это)

cd
mkdir custom

Для установки нано использования ниже управляют или используют любимого редактора

sudo apt-get install nano

Для выхода из нано нажатия ctrl + x , и нажатие y

nano custom/vhelper

Добавляют эти строки...

#!/usr/bin/env bash
ENV_PATH="$HOME/virt/$1/bin/activate"
bash --rcfile $ENV_PATH -i

Grant execue разрешение в Ваш файл

sudo chmod +x custom/vhelper

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

PATH=$PATH:"$HOME/custom"

Теперь можно использовать его отовсюду, просто введя ниже команды...

vhelper YOUR_VIRTUAL_ENV_FOLDER_NAME

предполагают, что это - abc затем...

vhelper abc

Поздравляю Вы активировали Вас virtualenv...

0
ответ дан 1 December 2019 в 09:13

Поскольку я сталкиваюсь с тем же случаем, я узнал то помещение source acitvate в .bashrc из подоболочки могло бы быть хорошее направление.

#!/bin/bash
#
# This is an example for https://askubuntu.com/a/1052868/847382
#
# Copyright 2018 (c) Sebastian Sawicki (0x52fb0d10)
#  OPENPGP4FPR:5691BED8E6CA579830842DD85CB361E552FB0D10
#
# Licence: https://creativecommons.org/licenses/by/4.0/
#

# Create temporary directory
TMPDIR="$(mktemp --directory)"
trap "echo 'INFO: Exited temporary shell.' >&2; rm --force --recursive '${TMPDIR}'" EXIT

# Set-up virtualenv in the temporary directory
virtualenv "${TMPDIR}"
. "${TMPDIR}/bin/activate"

# Install any required pip packages
[ -r "$(pwd)/pyReqs.txt" ] && pip install --requirement "$(pwd)/pyReqs.txt"

# Run a subshell with virtualenv already activated
bash --rcfile "${TMPDIR}/bin/activate" -i
4
ответ дан 1 December 2019 в 09:13

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

Похожие вопросы: