【问题标题】:Bash script to run python script in virtualenv在 virtualenv 中运行 python 脚本的 Bash 脚本
【发布时间】:2017-02-15 18:27:23
【问题描述】:

我正在创建需要运行 python 脚本的 PHP 应用程序。我必须使用 virtualenv。在项目目录中,我创建了env 目录并在内部创建了名为python 的虚拟环境。在另一个目录中,我放置了我想运行的脚本和这个 bash 脚本:

#!/bin/bash

app="$(pwd)/../"
pythonEnv="${app}env/python/"
source ${pythonEnv}"bin/activate"
"${pythonEnv}bin/python" "${app}scripts/script.py arg1 arg2"

但是当我运行这个脚本(到目前为止使用终端)时,我得到了这个错误:

/var/www/project/scripts/../env/python/bin/python: can't open file '/var/www/project/scripts/../scripts/script.py arg1 arg2': [Errno 2] No such file or directory

当然在scripts目录下还有script.py,并且有正确的访问权限:

-rwxrwxr-x

我做错了什么?

【问题讨论】:

  • 检查目录。我假设目录不正确..检查你把脚本放在哪里。
  • @orvi 我正在从错误中复制路径,它的工作,所以目录是正确的

标签: python linux bash virtualenv


【解决方案1】:

阅读您的错误消息,解释器似乎认为该文件是/var/www/project/scripts/../scripts/script.py arg1 arg2 而不仅仅是/var/www/project/scripts/../scripts/script.py。您应该将arg1arg2 与文件名分开。

另外,我认为您可以在激活虚拟环境后直接写 python 而不是 "${pythonEnv}bin/python"

【讨论】:

    【解决方案2】:

    由于您的引用,您试图将 "${app}scripts/script.py arg1 arg2" 称为脚本名称 - 它不存在。您可以更改脚本来修复它:

    ${pythonEnv}bin/python ${app}scripts/script.py arg1 arg2
    

    根据需要调整您的引用,但要保持具体。例如,如果您需要引用 pythonEnv 变量,请执行 "${pythonEnv}"

    【讨论】:

      最近更新 更多