如何在使用pip安装的Anaconda中卸载软件包

32

问题:

我已经安装了Anaconda:

conda -V
conda 4.4.7

我还安装了很多包,使用 python3 setup.py install 命令进行安装。其中一些包是通过 setup.py 文件创建的。

现在我想卸载一个包。

尝试过的方法:

pip uninstall packageName
pip3 uninstall packageName
conda uninstall packageName

针对 Python,它有效:检查 pip listpip3 list,并没有这样的包。

错误:

但是,对于 Conda,我得到了以下结果:

conda uninstall packageName
Solving environment: failed

PackagesNotFoundError: The following packages are missing from the target environment:
  - packageName

让我们检查一下:

conda list
packageName

P.S. 我发现信息显示,conda uninstallconda remove在这种情况下无法使用。那么该怎么办呢?

P.S.S. 实际上,我更改了packageName的真实名称,但如果这个信息很重要,我会添加它。


我的信息:

conda info

     active environment : None
       user config file : /home/masamok4/.condarc
 populated config files : /home/masamok4/anaconda3/.condarc
                          /home/masamok4/.condarc
          conda version : 4.4.7
    conda-build version : 3.0.27
         python version : 3.6.3.final.0
       base environment : /home/masamok4/anaconda3  (writable)
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.continuum.io/pkgs/main/linux-64
                          https://repo.continuum.io/pkgs/main/noarch
                          https://repo.continuum.io/pkgs/free/linux-64
                          https://repo.continuum.io/pkgs/free/noarch
                          https://repo.continuum.io/pkgs/r/linux-64
                          https://repo.continuum.io/pkgs/r/noarch
                          https://repo.continuum.io/pkgs/pro/linux-64
                          https://repo.continuum.io/pkgs/pro/noarch
          package cache : /home/masamok4/anaconda3/pkgs
                          /home/masamok4/.conda/pkgs
       envs directories : /home/masamok4/anaconda3/envs
                          /home/masamok4/.conda/envs
               platform : linux-64
             user-agent : conda/4.4.7 requests/2.18.4 CPython/3.6.3 Linux/4.4.0-87-generic ubuntu/16.04 glibc/2.23
                UID:GID : 1003:1003
             netrc file : None
           offline mode : False

1
有点混乱。但是 condapip 有不同的索引方式。conda 使用文件记录索引,而 pip 直接扫描 lib 目录。因此,尽管 conda list 可以显示包括 pip install 的所有软件包,但由 pip 安装的软件包不受 conda 控制。 - Sraw
@Sraw 谢谢您的回复!好的,我明白了,但是在我使用 pip uninstall 后,如何让 conda 包含这些包呢? - Mikhail_Sam
这个问题解决了吗? - Mihaela Grigore
1
@Mihaela 我不能确定 - 我重新安装了整个Anaconda,所以我现在无法再现这种行为。 - Mikhail_Sam
5个回答

13
您可以使用Jupyter Notebook来解决这个问题:
  • 打开Jupyter Notebook
  • 使用正确的内核打开一个新的笔记本
  • 在代码单元格中输入!pip uninstall -y [package]
  • 运行代码单元格

1
什么是正确的内核?你指的是正确的环境吗?还是正确的Python? - agent18
@agent18,在你想要修改的环境中切换后,你需要运行你的笔记本。 - abe
这个对你有用吗,@xiawi?对我来说没有。 - Mihaela Grigore
对于我提出的答案(不是您评论的这个),它包括列出软件包的所有文件,然后将其删除。因此,是的,“它有效”,但在依赖性方面存在风险。如果您认为“它无效”,则应该提出另一个问题,解释确切原因“它无效”(因为一开始并不明显)。 - xiawi

9

在conda环境中卸载所有pypi包的最佳方法是:

conda activate <your-env>
conda list | awk '/pypi/ {print $1}' | xargs pip uninstall -y

1

在conda环境中使用pip安装和卸载软件包时需要小心。对我而言,有效的方法是基于https://dev59.com/nlgR5IYBdhLWcg3wp-q5#43729857

  1. 通过在conda环境内运行conda install pip来安装特定于conda环境的pip
  2. 在安装或卸载软件包时指定该特定pip的完整路径。通常,您可以在虚拟环境的bin文件夹中找到它(例如:/anaconda/envs/venv_name/bin/)。因此,以下内容对我而言有效:/anaconda/envs/venv_name/bin/pip install_or_uninstall package_name

1
谢谢你的回答! 我已经没有这样的配置了,所以现在无法检查它。 但如果再次遇到这个问题,我会进行检查。 - Mikhail_Sam

1
如果您使用setup.py安装了软件包,则很可能需要手动删除软件包文件。
您会发现卸载setup.py安装维基非常有用。以下是Unix操作说明:
sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then in bash:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

有没有办法防止卸载包,如果其他包依赖于它? - Rahul
2
不好意思,恐怕不行! - Abhinav Sood

0
如同显示在 conda uninstall -hforce-remove 参数,
--force-remove, --force
                        Forces removal of a package without removing packages
                        that depend on it. Using this option will usually
                        leave your environment in a broken and inconsistent
                        state.

我认为你特定的软件包 packageName 没有正确安装。换句话说,依赖于 packageName 的软件包没有正确安装,但是你想要卸载 packageName。因此,conda uninstall packageName 失败了。你可以尝试:

conda uninstall packageName --force

这里介绍的是与命令 pip uninstall packageNamepip3 uninstall packageName 用法相同的 <p> 命令。也就是说,可以“卸载一个包而不删除依赖它的其他包”。

希望对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接