Python 为什么PyPi(pip)在卸载包时会尝试删除站点包?

Python 为什么PyPi(pip)在卸载包时会尝试删除站点包?,python,package,pypi,site-packages,Python,Package,Pypi,Site Packages,以下是我尝试卸载软件包时发生的情况: (soothsayer_py3.8_env) jespinozlt2-osx:Prototype jespinoz$ pip uninstall soothsayer Found existing installation: soothsayer 2020.5.1 Uninstalling soothsayer-2020.5.1: Would remove: /Users/jespinoz/anaconda3/envs/soothsayer_py

以下是我尝试卸载软件包时发生的情况:

(soothsayer_py3.8_env) jespinozlt2-osx:Prototype jespinoz$ pip uninstall soothsayer
Found existing installation: soothsayer 2020.5.1
Uninstalling soothsayer-2020.5.1:
  Would remove:
    /Users/jespinoz/anaconda3/envs/soothsayer_py3.8_env/bin/clairvoyance.py
    /Users/jespinoz/anaconda3/envs/soothsayer_py3.8_env/bin/run_soothsayer.py
    /Users/jespinoz/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/
  Would not remove (might be manually added):
    /Users/jespinoz/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/soothsayer-2020.5.1.dist-info/Icon
这是
setup.py

import re, datetime
from setuptools import setup, find_packages

# Version
version = None
with open("./soothsayer/__init__.py", "r") as f:
    for line in f.readlines():
        line = line.strip()
        if line.startswith("__version__"):
            version = line.split("=")[-1].strip().strip('"')
assert version is not None, "Check version in soothsayer/__init__.py"

setup(name='soothsayer',
      version=version,
      description='High-level API for (bio-)informatics',
      url='https://github.com/jolespin/soothsayer',
      author='Josh L. Espinoza',
      author_email='jespinoz@jcvi.org',
      license='BSD-3',
      packages=find_packages(include=("*", "./*")),
      install_requires=[
    "matplotlib >= 2.2.2",
    "scipy >= 1.0",
    "scikit-learn >= 0.20.2",
    "numpy >= 1.13", #, < 1.14.0",
    'pandas >= 1.0',
    'networkx >= 2.0',
    'ete3 >= 3.0',
    'scikit-bio >= 0.5.1',
    "biopython >= 1.5",
    "xarray >= 0.10.3",
    "tqdm >=4.19",
    "openpyxl >= 2.5",
    # "astropy >= 3.0",
    "rpy2 >= 2.9.4, < 3.0",
    "matplotlib_venn",
    "palettable >= 3.0.0",
    "adjustText",
    "tzlocal",
    "statsmodels >= 0.10.0", #https://github.com/statsmodels/statsmodels/issues/5899 May need to use this separately: pip install git+https://github.com/statsmodels/statsmodels.git@maintenance/0.10.x
    "teneto",
    "mmh3",
    "soothsayer_utils >= 2020.4.30",

      ],
     include_package_data=True,
     scripts=['bin/clairvoyance.py', "bin/run_soothsayer.py"],


)

这是我的
pip
版本:

pip 20.1 from /Users/jespinoz/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/pip (python 3.8)
我好像不明白?有人知道是什么导致了这个问题吗

我假设导致问题的项目的PyPI页面和源代码存储库如下所示:

源代码存储库的根目录下有一个文件,其名称包含不寻常的字符。它有时显示为类似于
'Icon'$'\r'
的内容。该文件似乎也存在于
soussayer.egg info
目录中。因此,当pip安装该发行版时,它会以某种方式对正在安装的文件进行奇怪的记录:

$ pip show --files soothsayer
Name: soothsayer
Version: 2020.5.4
Summary: High-level package for (bio-)informatics
Home-page: https://github.com/jolespin/soothsayer
Author: Josh L. Espinoza
Author-email: jespinoz@jcvi.org
License: BSD-3
Location: /tmp/tmp.YDoTgEDb9A/.venv/lib/python3.6/site-packages
Requires: networkx, teneto, palettable, matplotlib-venn, rpy2, xarray, ete3, biopython, tqdm, pandas, scikit-learn, scipy, numpy, scikit-bio, openpyxl, mmh3, matplotlib, statsmodels, adjustText, soothsayer-utils, tzlocal
Required-by: 
Files:
  "
  "soothsayer-2020.5.4.dist-info/Icon
  .
  ../../../bin/__pycache__/clairvoyance.cpython-36.pyc
  ../../../bin/__pycache__/run_soothsayer.cpython-36.pyc
  ../../../bin/clairvoyance.py
  ../../../bin/run_soothsayer.py
  soothsayer-2020.5.4.dist-info/INSTALLER
  soothsayer-2020.5.4.dist-info/Icon
  soothsayer-2020.5.4.dist-info/METADATA
  soothsayer-2020.5.4.dist-info/RECORD
  soothsayer-2020.5.4.dist-info/WHEEL
  soothsayer-2020.5.4.dist-info/top_level.txt
  soothsayer/__init__.py
在上面,请注意第一次记录的3个
文件
。这些记录显然是错误的。特别是第3行可能会导致pip打算删除
站点包
目录

我建议占卜者项目的所有者应:

  • 了解这些文件是如何创建的,并禁用创建这些文件的软件
  • 清理所有分支中的源代码存储库以防止将来的版本中发生这种情况
  • 发布所有故障版本的维护或错误修复版本
  • 删除PyPI和其他类似索引上发布的所有错误分发版

更新

进一步检查后,似乎在源代码存储库的每个目录中都有一个类似的异常命名的
图标
文件,这些文件很可能也需要消失(除了该存储库中的许多其他异常内容).

我假设导致问题的项目的PyPI页面和源代码存储库如下所示:

源代码存储库的根目录下有一个文件,其名称包含不寻常的字符。它有时显示为类似于
'Icon'$'\r'
的内容。该文件似乎也存在于
soussayer.egg info
目录中。因此,当pip安装该发行版时,它会以某种方式对正在安装的文件进行奇怪的记录:

$ pip show --files soothsayer
Name: soothsayer
Version: 2020.5.4
Summary: High-level package for (bio-)informatics
Home-page: https://github.com/jolespin/soothsayer
Author: Josh L. Espinoza
Author-email: jespinoz@jcvi.org
License: BSD-3
Location: /tmp/tmp.YDoTgEDb9A/.venv/lib/python3.6/site-packages
Requires: networkx, teneto, palettable, matplotlib-venn, rpy2, xarray, ete3, biopython, tqdm, pandas, scikit-learn, scipy, numpy, scikit-bio, openpyxl, mmh3, matplotlib, statsmodels, adjustText, soothsayer-utils, tzlocal
Required-by: 
Files:
  "
  "soothsayer-2020.5.4.dist-info/Icon
  .
  ../../../bin/__pycache__/clairvoyance.cpython-36.pyc
  ../../../bin/__pycache__/run_soothsayer.cpython-36.pyc
  ../../../bin/clairvoyance.py
  ../../../bin/run_soothsayer.py
  soothsayer-2020.5.4.dist-info/INSTALLER
  soothsayer-2020.5.4.dist-info/Icon
  soothsayer-2020.5.4.dist-info/METADATA
  soothsayer-2020.5.4.dist-info/RECORD
  soothsayer-2020.5.4.dist-info/WHEEL
  soothsayer-2020.5.4.dist-info/top_level.txt
  soothsayer/__init__.py
在上面,请注意第一次记录的3个
文件
。这些记录显然是错误的。特别是第3行可能会导致pip打算删除
站点包
目录

我建议占卜者项目的所有者应:

  • 了解这些文件是如何创建的,并禁用创建这些文件的软件
  • 清理所有分支中的源代码存储库以防止将来的版本中发生这种情况
  • 发布所有故障版本的维护或错误修复版本
  • 删除PyPI和其他类似索引上发布的所有错误分发版

更新


进一步检查后,似乎在源代码存储库的每个目录中都有一个类似的异常命名的
图标
文件,这些文件很可能也需要消失(除了该存储库中的许多其他异常内容).

这似乎是一个更适合的问题。
path/to/pythonX.Y-m pip show--files soundessayer
的输出是什么。。。好的,我在本地安装了这个软件包,并对它进行了检查,您的软件包中出现了一些不寻常的情况。我的第一个想法是检查这一行:
packages=find_packages(include=(“*”,“/*”),
。我将进一步研究这个问题。这似乎是一个更适合的问题。
path/to/pythonX.Y-m pip show--files soundessayer
的输出是什么。。。好的,我在本地安装了这个软件包,并对它进行了检查,您的软件包中出现了一些不寻常的情况。我的第一个想法是检查这一行:
packages=find_packages(include=(“*”,“/*”),
。我会进一步调查的。谢谢你确认这一点。我在OSX上创建这些文件,我相信默认情况下这些文件会添加到每个目录中。有没有办法排除.pyc文件和图标文件?我是通过
python setup.py sdist
创建发行版的。老实说,我不知道这些文件是如何在sdist中结束的。我需要试着复制它。此外,如果这些文件或多或少都是标准的Mac OS文件,我很惊讶它们的文件名是否会造成这种影响。我有点困惑,这是怎么发生的。您需要弄清楚文件名实际上是什么,是否需要将它们添加到
.gitignore
清单中的某些排除规则中。在
中。清单.in是否由PyPi使用?这肯定是我正在做的事情,因为这发生在我创建的另一个包中。简而言之,
MANIFEST.In
有助于包括或排除源发行版中的文件(
sdist
)。但据我所知,默认情况下,setuptools不会在sdist中包含此类文件,因此我认为没有必要在
MANIFEST.in
中添加明确的排除规则。所以我真的不确定这是怎么发生的,我从来没有见过这样的事情,但我不使用那个操作系统。首先弄清楚为什么这些文件在您的文件系统中,并尝试停用它们的创建,这可能会很有趣。使用
.gitignore
清单.in
应该排除的文件有一个限制。您可以添加我如何将其添加到.gitignore和MANIFEST.in文件中吗?我将尝试并选择它作为答案。感谢您识别此。我在OSX上创建这些文件,我相信默认情况下这些文件会添加到每个目录中。有没有办法排除.pyc文件和图标文件