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文件和图标文件