Я хочу сценарий, который настроит мои инструменты, но также и сохранять виртуальную среду в целости для моей подсказки. Но, поскольку 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).
Сценарий оболочки при выполнении, выполнения в подоболочке и всех параметрах и среде выходит из объема, после того как выполнение завершается.
Для предоставления доступа к среде доступной на текущей сессии оболочки Вам нужно к source
это:
source /path/to/script.sh
Как примечание стороны, если Вы хотите, чтобы некоторый процесс блокирования продолжал работать в фоновом режиме, при восстановлении доступа к терминальной подсказке отправьте процесс в фон:
some_command_to_run_in_background &
Можно использовать 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/
Это не то, что Вы попросили, но я думаю, что это могло бы помочь Вам.
самый легкий способ активировать виртуальную среду отовсюду:
Примечание Разработчика:-Вы должно создать весь Ваш 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...
Поскольку я сталкиваюсь с тем же случаем, я узнал то помещение 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