You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shell脚本运行source $(pipenv --venv)/bin/activate提示未找到如何解决

source $(pipenv --venv)/bin/activate的作用

  • pipenv --venv会输出当前项目对应的pipenv虚拟环境的本地绝对路径
  • 虚拟环境目录下的/bin/activate是官方提供的激活脚本,执行后会修改当前shell的环境变量,让后续执行的python、pip、第三方工具命令优先调用虚拟环境内安装的版本,和系统全局环境隔离
  • source是shell内置命令,作用是在当前shell进程内执行目标脚本,保证激活脚本修改的环境变量对同脚本内后续执行的命令生效;如果不用source直接执行activate,脚本会在独立子进程内运行,环境变量修改不会传递到父进程,后续执行flask还是会调用全局环境的版本。

脚本报source: not found的原因和解决方法

报错原因

你脚本首行声明的是#!/bin/sh,绝大多数Linux发行版中/bin/sh默认链接的是dash而非bash,dash没有内置source命令,所以无法识别该指令。
如果后续还出现pipenv: not found的报错,是因为非交互式运行的shell脚本默认不会加载当前用户的~/.bashrc/~/.zshrc等配置文件,如果你是通过用户级pip安装的pipenv(默认安装路径为~/.local/bin),该路径不在脚本运行时的PATH环境变量内,就会找不到pipenv命令。

解决方法

推荐优先选第一种方案:

  1. 修改脚本解释器为bash
    把脚本第一行替换为#!/bin/bash即可,bash原生支持source命令,也会加载更多用户环境配置,大部分情况下可以直接找到已安装的pipenv。如果还是找不到pipenv,可以手动把pipenv所在路径加入脚本的PATH变量,修改后的示例如下:
#!/bin/bash

# 找不到pipenv时取消下一行注释
# export PATH=$PATH:~/.local/bin

export FLASK_APP=./myapp/index.py
source $(pipenv --venv)/bin/activate
flask run -h 0.0.0.0
  1. 不修改解释器的兼容写法
    如果必须保留#!/bin/sh的声明,可以把source替换为dash支持的.命令:
. $(pipenv --venv)/bin/activate
  1. 更稳妥的简化写法
    不需要手动激活虚拟环境,直接用pipenv run执行后续命令即可,不需要处理source相关的兼容问题,脚本可以直接简化为:
#!/bin/bash
export FLASK_APP=./myapp/index.py
pipenv run flask run -h 0.0.0.0

内容的提问来源于stack exchange,提问作者iFunction

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:00:03