我需要编写一个脚本来启动使用 pyenv 开发的gunicorn + django 站点,该脚本类似于
#!/bin/bash
pyenv activate .ve
pyenv exec gunicorn config.wsgi:application --name mini2 --workers 8 \
--workers 8 --bind=unix:/tmp/run/mini2.socket \
--log-level=debug --log-file=-
Run Code Online (Sandbox Code Playgroud)
和错误消息
2021-12-06 14:09:00 [mini2@s017 mini2]$ ./prodution.sh
Failed to activate virtualenv.
Perhaps pyenv-virtualenv has not been loaded into your shell properly.
Please restart current shell and try again.
2021-12-06 14:09:55 [mini2@s017 mini2]$
Run Code Online (Sandbox Code Playgroud)
我可以逐行运行脚本。所以脚本中肯定有问题,但我不知道出了什么问题。
我已经在 bashrc 中附加了几行关于 pyenv 的内容
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
Run Code Online (Sandbox Code Playgroud)
那么有没有办法在bash脚本中激活pyenv创建的virtualenv?有什么建议 ??
更新:
根据Failed to activate virtualenv with pyenv
我更新我的 .bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
#if command -v pyenv 1>/dev/null 2>&1; then
# eval "$(pyenv init -)"
#fi
Run Code Online (Sandbox Code Playgroud)
但仍然不工作。
my test script
#!/bin/bash
pyenv activate .ve
and the error
Failed to activate virtualenv.
Perhaps pyenv-virtualenv has not been loaded into your shell properly.
Please restart current shell and try again.
Run Code Online (Sandbox Code Playgroud)
而不是使用
${PYENV_ROOT}/versions/<venv name>/bin/python script.py
Run Code Online (Sandbox Code Playgroud)
正如其他答案中所建议的,您可以“手动”激活环境:
. ${PYENV_ROOT}/versions/<venv name>/bin/activate
python script.py
Run Code Online (Sandbox Code Playgroud)
请注意,前面的点${PYENV_ROOT}等于source命令。
这样做的好处是保留python script.py为命令行而不是/home/<user>/<pyenv root>/versions/<venv name>/bin/python script.py,这可能会有所帮助htop。
这意味着替换
pyenv activate .ve
Run Code Online (Sandbox Code Playgroud)
和
. ${PYENV_ROOT}/versions/.ve/bin/activate
Run Code Online (Sandbox Code Playgroud)
可以解决您的问题,前提是这.ve是虚拟环境的名称。
您的脚本中不需要pyenv activate虚拟环境。由于虚拟环境的工作方式[1],您只需使用 Python 解释器二进制文件的绝对路径。$ pyenv which python您可以在激活环境时使用该路径来确认。最实质性的事情pyenv activate是将解释器二进制文件添加到您的PATH文件中python,python3以便 , 等将解析为它[2]。pyenv您的初始化命令仅.bashrc用于启用 shell 自动完成、重新哈希填充程序和定义pyenvshell 函数[3]。
总而言之:
#!/bin/bash
"${PYENV_ROOT}/versions/<venv name>/bin/python" script.py
Run Code Online (Sandbox Code Playgroud)