Pipenv始终指向已有虚拟环境及包安装锁定失败求助
Pipenv相关问题的原因与解决方法
问题1:创建虚拟环境时指向已有环境,Pipfile生成在错误目录
执行命令及输出
[philippbunke@fedora market_maker]$ pipenv --python 3.10 Virtualenv already exists! Removing existing virtualenv... Creating a virtualenv for this project... Pipfile: /home/philippbunke/Programs/repos/work/playground/Pipfile Using /usr/bin/python3 (3.10.6) to create virtualenv... ⠋ Creating virtual environment...created virtual environment CPython3.10.6.final.0-64 in 558ms creator CPython3Posix(dest=/home/philippbunke/.local/share/virtualenvs/playground-QFVQT-z1, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/philippbunke/.local/share/virtualenv) added seed packages: pip==21.3.1, setuptools==58.3.0, wheel==0.37.0 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator ✔ Successfully created virtual environment! Virtualenv location: /home/philippbunke/.local/share/virtualenvs/playground-QFVQT-z1
原因
- Pipenv通过目录名哈希关联虚拟环境,若当前目录与已有环境的哈希冲突,会自动复用旧环境
- 存在残留的
PIPENV_PIPFILE环境变量,强制指定了Pipfile路径 - 当前目录的父目录中存在
Pipfile,Pipenv会向上查找并复用
解决方法
- 清除环境变量:
unset PIPENV_PIPFILE - 强制创建独立环境:
pipenv --python 3.10 --clear--clear参数会彻底清除关联的旧环境,确保生成全新环境 - 手动指定Pipfile路径:
PIPENV_PIPFILE=$(pwd)/Pipfile pipenv --python 3.10 - 删除旧环境目录:直接删除
/home/philippbunke/.local/share/virtualenvs/playground-QFVQT-z1后重新执行创建命令
问题2:安装qpsolvers时依赖锁定失败
执行命令及报错
[philippbunke@fedora market_maker]$ pipenv install qpsolvers Installing qpsolvers... Adding qpsolvers to Pipfile's [packages]... ✔ Installation Succeeded Pipfile.lock not found, creating... Locking [dev-packages] dependencies... Locking [packages] dependencies... Building requirements... Resolving dependencies... ✘ Locking Failed! CRITICAL:pipenv.patched.notpip._internal.resolution.resolvelib.factory:Could not find a version that satisfies the requirement python>=3.6 (from versions: none) [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/resolver.py", line 743, in _main [ResolutionFailure]: resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages, dev) [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/resolver.py", line 704, in resolve_packages [ResolutionFailure]: results, resolver = resolve( [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/resolver.py", line 685, in resolve [ResolutionFailure]: return resolve_deps( [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/utils.py", line 1370, in resolve_deps [ResolutionFailure]: results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps( [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/utils.py", line 1099, in actually_resolve_deps [ResolutionFailure]: resolver.resolve() [ResolutionFailure]: File "/home/philippbunke/.local/lib/python3.10/site-packages/pipenv/utils.py", line 877, in resolve [ResolutionFailure]: raise ResolutionFailure(message=str(e)) [pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies. You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation. Hint: try $ pipenv lock --pre if it is a pre-release dependency. ERROR: No matching distribution found for python>=3.6
原因
- qpsolvers的某个依赖包错误地将
python作为PyPI包依赖声明(而非Python版本要求),导致Pipenv尝试下载不存在的python包 - Pipenv解析器版本存在bug,无法正确识别依赖中的Python版本约束
- 本地Python环境的版本信息未被Pipenv正确读取
解决方法
- 跳过锁定直接安装:
安装完成后执行pipenv install qpsolvers --skip-lockpipenv graph查看依赖树,找到错误声明的包并手动修改Pipfile - 更新Pipenv到最新版本:
新版本解析器通常能修复这类版本约束识别问题pip install --upgrade pipenv - 指定qpsolvers的兼容版本:选择依赖声明正确的历史版本安装,例如:
pipenv install qpsolvers==3.2.0 - 尝试预发布版本解析:
pipenv lock --pre
内容的提问来源于stack exchange,提问作者PhilippB
相关产品推荐
相关产品推荐

