如何删除通过 pyenv/pip 安装的软件包

How to remove a package installed via pyenv/pip

我对通过 pyenv/pip 安装的路径上的可执行文件感到困惑。故事始于我有多个 python 解释器和给定的包。今天我了解了pipx,它应该为我提供了一个由python包(可执行文件)组成的独立于系统的可执行文件。安装包后,pipx 正确地警告我它已经存在。但是,不太清楚如何在我的路径上摆脱它以便能够使用新的、正确的可执行文件。

我曾尝试从字面上删除路径上发现的重复文件,这导致了以下有趣的情况:

my_machine:proj_a ikkamens$ pipx install flynt --python python3.8
⚠️  Note: flynt was already on your PATH at /Users/ikkamens/.pyenv/shims/flynt
  installed package flynt 0.40.1, Python 3.8.0
  These apps are now globally available
    - flynt
done! ✨  ✨
my_machine:proj_a ikkamens$ flynt --help
pyenv: flynt: command not found

The 'flynt' command exists in these Python versions:
  3.6.8/envs/blues
  3.7.3
  3.8-dev
  blues

my_machine:proj_a ikkamens$ rm /Users/ikkamens/.pyenv/shims/flynt
my_machine:proj_a ikkamens$ flynt
-bash: /Users/ikkamens/.pyenv/shims/flynt: No such file or directory
my_machine:proj_a ikkamens$ cd
my_machine:~ ikkamens$ cat .bashrc | grep fl
my_machine:~ ikkamens$ which flynt
/Users/ikkamens/.local/bin/flynt
my_machine:~ ikkamens$ flynt
-bash: /Users/ikkamens/.pyenv/shims/flynt: No such file or directory

怎么可能whichreturns和执行的不一样呢?请注意,我的 .bashrc 不包含任何别名或类似名称(grep 语句)。如何彻底摆脱旧安装的遗留问题?

正如@jordanm 评论的那样,问题是由于 bash 散列 PATH 查找造成的。

my_machine:~ ikkamens$ rm /Users/ikkamens/.pyenv/shims/flynt
my_machine:~ ikkamens$ flynt
-bash: /Users/ikkamens/.pyenv/shims/flynt: No such file or directory
my_machine:~ ikkamens$ which flynt
/Users/ikkamens/.local/bin/flynt
my_machine:~ ikkamens$ hash -r
my_machine:~ ikkamens$ flynt
Running flynt v.0.40.1

使用 pyenv,你有不同的隔离 python 环境。首先,您必须激活其中一个 pyenv 环境:

# check which virtual environments you have
pyenv virtualenvs

# activate one
pyenv activate blues
# seems that `blues` is your virtual environment with python 3.6.8
# then install your package into active virtual environment
pip install flynt
# also uninstall packages while being in your environment