`pip list` 列出实际未安装的包

`pip list` listing packages which are actually not installed

我想我发现了 "a feature",在一些奇怪的情况下 pip 列出了一个已安装的包,即使它没有。如果有人能向我解释发生了什么——那就太好了。以下是重现步骤:

  1. 设置两个python环境:$ python3 -m venv env_1 && python3 -m venv env_2

  2. 获取任何带有setup.py的正常python包进行安装,我个人使用了我在互联网上找到的第一个东西:$ git clone https://github.com/BillMills/python-package-example.git

  3. 激活env_1:$ . env_1/bin/activate

  4. 安装你得到的包作为开发包$ pip install -e python-package-example

  5. 停用env_1,激活env_2:$ deactivate && . env_2/bin/activate

  6. 进入您刚为 env_1 安装的软件包并列出已安装的软件包(对于 env_2):$ cd python-package-example && pip list

无论出于何种原因,这显示 python-package-example 已安装。不过,仅当您位于此文件夹内时才有效,并且仅在您将其作为开发包安装一次后才有效。

P.S。 python3 -m pip show python-package-exampleenv_1 中显示:

Name: python-package-example
Version: 0.1
Summary: An example python package
Home-page: https://github.com/BillMills/python-package-example
Author: Bill Mills
Author-email: myemail@example.com
License: MIT
Location: /home/esrlabs/Workspace/testing/bash/test/python-package-example
Requires: numpy
Required-by:

env_2 returns WARNING: Package(s) not found: python-package-example 中的相同查询在 python-package-example 之外,并且 return 与 env_1 中的查询相同那个文件夹。

我无法重现:

(env_2) test-venv $$ cd python-package-example/
(env_2) python-package-example $$ pip list
Package    Version
---------- -------
pip        19.3.1 
setuptools 41.4.0 
wheel      0.33.6 

python-package-example 未列出。

可能与此pip issue有关。

当前工作目录中的 python_package_example.egg-info/ 以某种方式被拾取并注册为已安装的项目。

我不会太担心它。正如在前面提到的问题的评论中所说,这就是为什么 src layout 是一件非常好的事情,并且在大多数情况下可以缓解这个问题和许多其他类似问题。