pipx安装的pip-tools未将依赖安装到激活虚拟环境如何解决?
pipx安装的pip-tools同步依赖到项目虚拟环境的解决方法
问题原因
pipx安装的工具默认绑定其自身独立虚拟环境的Python解释器,直接调用pip-sync/pip-compile时,工具默认使用自身环境的pip执行安装操作,和你当前激活的项目虚拟环境无关,该问题和pyenv的版本管理配置没有关联。
你当前的依赖声明文件写法是正确的,
requirements-dev.in中使用-c requirements.txt对齐生产依赖版本的配置无需调整。
解决方法
方案1:使用python -m模式运行(推荐,无需修改现有配置)
确保项目虚拟环境已处于激活状态,此时shell的python命令默认指向当前项目虚拟环境的解释器,改用模块调用的方式运行pip-tools即可:
# 生成生产依赖锁文件 python -m piptools compile requirements.in # 生成开发依赖锁文件 python -m piptools compile requirements-dev.in # 同步依赖到当前激活的项目虚拟环境 python -m piptools sync requirements.txt requirements-dev.txt
该方案适配所有场景,无需调整全局安装配置,切换不同项目虚拟环境后自动适配当前环境。
方案2:设置shell别名简化调用
如果觉得每次输入python -m piptools太繁琐,可以在激活项目虚拟环境后临时设置别名:
alias pip-compile='python -m piptools compile' alias pip-sync='python -m piptools sync'
需要长期生效的话,可将上述两行命令添加到项目虚拟环境的venv/bin/activate脚本末尾,每次激活项目环境时别名会自动生效,不会影响全局其他项目。
方案3:项目虚拟环境内单独安装pip-tools
如果不想用全局的pip-tools,也可以在每个项目的虚拟环境内单独安装:
# 激活项目虚拟环境后执行 pip install pip-tools
安装完成后直接调用pip-compile、pip-sync就会默认作用于当前项目虚拟环境,缺点是每个项目都需要单独安装一次pip-tools。
操作完成后执行pip freeze,即可看到flask、pytest等依赖已安装到当前项目虚拟环境中,不会再写入pipx的pip-tools独立环境。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

