Pipenv错误在用户主目录创建Pipfile的问题咨询
问题原因
Pipenv 运行时的路径查找逻辑是:从执行命令的当前目录开始,逐级向上遍历所有父级目录,只要找到第一个已存在的Pipfile文件,就会把这个文件所在的目录判定为项目根目录,所有虚拟环境关联、依赖安装、配置更新操作都会针对这个目录执行,不会在当前命令执行目录新建Pipfile。
你碰到的这个情况,最常见的原因是之前误在/users/me/主目录下执行过pipenv shell或者pipenv install这类会触发配置生成的命令,导致主目录下残留了旧的Pipfile和Pipfile.lock文件。后续不管你进入my-project目录还是它的子目录执行pipenv命令,程序向上遍历查找配置的时候,都会先命中主目录下的遗留Pipfile,自然就会把配置文件放在主目录下。
还有两种小概率触发场景:
- 你在shell配置里设置了全局的
PIPENV_PIPFILE环境变量,强制指定了Pipfile的生成路径为主目录 - 你执行
cd /users/me/my-project时,my-project目录实际还没创建,部分shell的默认配置下不会抛出路径不存在的报错,会直接停留在上一级有效目录也就是主目录,你以为自己已经进入了项目文件夹,实际终端的工作路径还在主目录,执行pipenv命令自然会把配置文件建在主目录。
修复方法
- 先进入
/users/me/目录,删除残留的Pipfile、Pipfile.lock两个文件 - 执行
mkdir -p /users/me/my-project确保目标项目目录真实存在,再执行cd /users/me/my-project进入目录,执行pwd确认输出的路径确实是目标项目路径,没有停留在上级目录 - 执行
echo $PIPENV_PIPFILE检查是否存在全局环境变量配置,如果输出了指向主目录的路径,就去你使用的shell对应的配置文件(比如.bashrc、.zshrc、.bash_profile)里删除对应的环境变量配置,重启终端后生效 - 上述操作完成后,再在项目目录下执行
pipenv shell或者pipenv install,Pipfile就会正常生成在当前项目目录下。如果需要临时强制指定配置路径,也可以在执行命令时临时传入环境变量:PIPENV_PIPFILE=/users/me/my-project/Pipfile pipenv install
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

