Выполнить команду после создания оболочки

#linux #python-poetry

Вопрос:

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

 cd /work/directory
 

И породить поэтическую оболочку с

 poetry shell
 

и снова перейдите в другой каталог

 cd /other/directory
 

чтобы закончить работу.

Я бы хотел автоматизировать это с помощью небольшого скрипта, такого как

 #!/bin/bash

cd /work/directory
poetry shell
cd /other/directory
# do work
 

Однако всякий раз, когда я запускаю этот сценарий, я застреваю poetry shell . Есть ли какой-нибудь вариант, подобный bash -c , чтобы я мог сделать следующее?

 poetry shell -c "cd /other/directory amp;amp; do work"
 

Комментарии:

1. ты когда-нибудь понимал это? Пожалуйста, поделитесь своим ответом!

2. @Dobler нет, извините

Ответ №1:

Вероятно, вы хотите запустить скрипт на python, используя виртуальную среду poetry. В этом случае, я думаю, вам следует использовать простую команду

 poetry run {your_command}
 

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

 poetry run python myscript.py
 

который будет использовать poetry виртуальную среду, с которой вы уже создали poetry install .

Ответ №2:

столкнулся с той же проблемой. это было опубликовано кем — то на сервере poetry discord:

Я не уверен, что poetry shell именно влечет за собой бег во всех деталях. Но… Может быть, вам достаточно просто активировать виртуальную среду. И если то, что вы хотите сделать, не является интерактивной работой в командной строке, то активация среды может даже не потребоваться.

Как правило, сначала вам нужно будет определить путь к виртуальной среде с помощью чего-то вроде poetry env info --path . Как только вы узнаете, что вы можете «активировать его» из любого места:

 . /path/to/venv/bin/activate
 

Или (в большинстве случаев) вы можете просто использовать любой из исполняемых файлов из этой виртуальной среды напрямую, без необходимости сначала активировать:

 /path/to/venv/bin/python path/to/script.py
 

Ответ №3:

Ремикс из других ответов.

poetry shell создает среду, но мы также можем создать среду вручную с помощью env use команды.

 # This will create a Python3.7 env 

poetry env use 3.7
 

Зачем использовать env use vs shell ?

env use это чистый метод, который имеет выход и завершает процесс. Он также активирует окружающую среду по мере необходимости.

Поэтому после env завершения мы действительно можем использовать ответ @DaveR и использовать run команду.

Цепная версия этого my_bash_script.sh сценария будет:

 #!/bin/bash
# Activate / Create   activate my enviroment
poetry env use 3.7

# Run my script in the above environment
poetry run python3.7 my_script.py
 

Дополнительный

env команда полезна для просмотра того, какие среды вы активировали.

 poetry env list