为何pip freeze未生成依赖?Python3.9(Mac)环境使用疑问
问题解析与解决办法
你对pip freeze的用法确实有误解
pip freeze本身是用来输出当前Python环境(全局/虚拟环境)中已安装的所有包及其版本,直接重定向到文件才是生成requirements的正确方式,比如:
python3 -m pip freeze > requirements.txt
而你用的pip freeze -r piptest.txt,这个-r参数的作用是读取指定的requirements文件,然后输出当前环境中不在这个文件里的包——你创建了空的piptest.txt,加上你之前是把依赖装到./package目录而非全局环境,当前全局环境里根本没有那些新依赖,所以输出为空,文件自然还是空的。
为什么你的操作拿不到新依赖?
你之前用python3 -m pip install --target ./package -r requirements.txt,这个命令是把依赖安装到指定的./package目录,而不是当前Python环境的全局站点包目录。pip freeze默认只会扫描全局(或虚拟环境)的已安装包,不会去读./package里的内容,所以自然识别不到你新增的依赖。
正确更新requirements.txt的方法
方法1:从已安装的target目录生成
如果已经把新依赖装到./package了,直接用pip list指定target目录来生成:
python3 -m pip list --format=freeze --target ./package > updated_requirements.txt
方法2:用虚拟环境(推荐)
虚拟环境能避免全局环境依赖混乱,步骤如下:
- 创建虚拟环境:
python3 -m venv .venv - 激活虚拟环境:
source .venv/bin/activate - 安装原有依赖:
pip install -r requirements.txt - 安装新增的依赖:
pip install 你的新库名 - 生成新的requirements:
pip freeze > requirements.txt
方法3:扫描代码自动生成(适合未提前安装依赖的情况)
用pipreqs工具扫描项目代码里的import语句,自动生成依赖列表:
- 先全局安装pipreqs:
python3 -m pip install pipreqs - 扫描项目根目录生成:
pipreqs ./ --force --encoding=utf-8
(--force用于覆盖现有requirements.txt,--encoding解决中文注释编码问题)
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

