我正在尝试修复我的一个virtualenv -我想将所有已安装的库重置为与生产相匹配的库。
有没有一种快速简单的方法来处理皮普?
我正在尝试修复我的一个virtualenv -我想将所有已安装的库重置为与生产相匹配的库。
有没有一种快速简单的方法来处理皮普?
当前回答
我做到了以下几点:
用当前安装的包列表创建名为reqs.txt的需求文件
pip freeze > reqs.txt
然后卸载reqs.txt中的所有包
# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt
我喜欢这种方法,因为如果你犯了错误,你总是有一个pip需求文件可以依靠。它也是可重复的,而且是跨平台的(Windows、Linux、MacOs)。
其他回答
最快的方法是完全重做virtualenv。我假设你有一个符合生产的requirements.txt文件,如果没有的话:
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
Pip无法知道它安装了哪些包,系统的包管理器安装了哪些包。为此,您需要这样做
对于基于rpm的发行版(将python2.7替换为安装PIP的python版本):
find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
对于基于deb的发行版:
find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
然后清理剩下的空目录:
find /usr/lib/python2.7 -type d -empty |xargs rm -fr
我发现上面的答案非常误导人,因为它会从你的发行版中删除所有(大部分?)python包,可能会给你留下一个坏掉的系统。
pip uninstall `pip freeze --user`
——user选项防止系统安装的包包含在清单中,从而避免/usr/lib和distutils权限错误。
这适用于我的windows系统
pip freeze > packages.txt && pip uninstall -y -r packages.txt && del packages.txt
第一部分pip freeze > packages.txt创建一个文本文件,其中包含使用pip安装的包的列表以及版本号
第二部分pip uninstall -y -r packages.txt删除已安装的所有软件包,不需要确认提示。
第三部分del packages.txt删除刚刚创建的packages.txt。
我使用——user选项卸载安装在用户站点上的所有包。
pip3 freeze --user | xargs pip3 uninstall -y