生成Poetry Shell后执行命令

8

我使用Python Poetry并需要自动化处理流程。具体来说,每次我需要使用命令行进入到一个目录中:

cd /work/directory

使用以下命令生成一个Poetry Shell:

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 && do work"

1
你最终解决了这个问题吗?请分享你的答案! - Dobler
@Dobler 不好意思,不是的。 - curiouscupcake
2
这样的话怎么样:export POETRY_ENV=`poetry env info -p`/bin/activate && . ${POETRY_ENV} && ls - MarshHawk
4个回答

11

如果您想在poetry虚拟环境中运行Python脚本,我认为您应该使用简单的命令:

poetry run {your_command}

为了举例说明,您可以按如下方式运行Python脚本:

poetry run python myscript.py

这将使用您已经使用 poetry install 创建的 poetry虚拟环境。


3

遇到了同样的问题。这是由诗歌discord服务器中的某个人发布的:

我不确定在所有细节上运行poetry shell究竟包含什么。但是... 也许你只需要激活虚拟环境就足够了。 如果你想要做的不是交互式的命令行工作,那么激活环境甚至可能是不必要的。

通常,你需要首先使用类似于poetry env info --path的东西来识别虚拟环境的路径。一旦你知道了这一点,你可以从任何地方“激活它”:

. /path/to/venv/bin/activate

或者(在大多数情况下),您可以直接使用该虚拟环境中的任何可执行文件,无需先激活:

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

2

其他答案的改编。

poetry shell 会生成一个环境,但我们也可以使用 env use 命令手动创建一个环境。

# This will create a Python3.7 env 

poetry env use 3.7

为什么要使用 env use 而不是 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 命令非常有用,可以查看您激活了哪些envs。

poetry env list

0
出于某种奇怪的原因,我需要在一个项目中激活一个环境,然后转到另一个文件夹并在那里执行一些脚本,所有这些都在一个脚本中。多亏了Zain's answer,我写了一个简单的一行代码,在当前shell中激活了该环境。
. $(cd ~/path/to/project ; poetry env info --path)/bin/activate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接