ModuleNotFoundError: No module named 'pandas._libs.interval'

ModuleNotFoundError: No module named 'pandas._libs.interval'

突然,我无法在 python 中导入 pandas。我正在使用anaconda作为包管理器,但似乎无论我卸载和安装多少次pandas,我仍然得到相同的错误:

(base) C:\>conda install pandas
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\au207178\Anaconda3

  added / updated specs:
    - pandas


The following NEW packages will be INSTALLED:

  blas               pkgs/main/win-64::blas-1.0-mkl
  bottleneck         pkgs/main/win-64::bottleneck-1.3.2-py38h2a96729_1
  intel-openmp       pkgs/main/win-64::intel-openmp-2021.4.0-haa95532_3556
  mkl                pkgs/main/win-64::mkl-2021.4.0-haa95532_640
  mkl-service        pkgs/main/win-64::mkl-service-2.4.0-py38h2bbff1b_0
  mkl_fft            pkgs/main/win-64::mkl_fft-1.3.1-py38h277e83a_0
  mkl_random         pkgs/main/win-64::mkl_random-1.2.2-py38hf11a4ad_0
  numexpr            pkgs/main/win-64::numexpr-2.8.1-py38hb80d3ca_0
  numpy              pkgs/main/win-64::numpy-1.21.2-py38hfca59bb_0
  numpy-base         pkgs/main/win-64::numpy-base-1.21.2-py38h0829f74_0
  pandas             pkgs/main/win-64::pandas-1.3.5-py38h6214cd6_0


Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(base) C:\>python
Python 3.8.12 (default, Oct 12 2021, 03:01:40) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\__init__.py", line 22, in <module>
    from pandas.compat import (
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\compat\__init__.py", line 15, in <module>
    from pandas.compat.numpy import (
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\compat\numpy\__init__.py", line 7, in <module>
    from pandas.util.version import Version
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\util\__init__.py", line 1, in <module>
    from pandas.util._decorators import (  # noqa
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\util\_decorators.py", line 14, in <module>
    from pandas._libs.properties import cache_readonly  # noqa
  File "C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas\_libs\__init__.py", line 13, in <module>
    from pandas._libs.interval import Interval
ModuleNotFoundError: No module named 'pandas._libs.interval'

我也试过了运行'conda update conda'.

接下来要做什么?

更新:

我检查了一下,文件肯定在“C:\Users\au207178\AppData\Roaming\Python\Python310\site-packages\pandas_libs\interval.pyx”中。

但是,我注意到该库的部分路径显示 'python310'。但是,我的 python 版本是 3.8.8。尝试导入 pandas._libs.interval 时,python 是否有可能以某种方式查找错误的位置?我已经尝试了 python 3.10(甚至无法安装 pandas)和 python 3.9.7(无效)。

我也试过conda install --revision 0,也没有效果...

是的,它似乎正在从 user-level 安装中加载 pandas。 User-level 安装可能会泄漏到 Conda 环境中并导致不可预测的行为,例如您所看到的。

我知道有两种作用途径。您可能想先尝试第二个,这将确认原因。但是,第一个选项在未来可能更易于管理,因为一旦完成,问题就应该得到解决。

选项 1:删除外部 Python(s)

如果您希望 Conda 简单地按预期工作,请卸载 user-level Python。请注意,检测到的 (Python 3.10) 可能不是唯一的,因此您可能需要追踪多个副本。我不在Windows,所以我不能建议具体的卸载步骤。

但是,您可能已经将此 user-level Python 用于其他项目,因此此选项可能不可行。

选项 2:使用隔离标志启动 Python

Python 提供了一些相关的标志,可以忽略可能导致其他 site-packages 泄漏的各种来源。以下是三个重要的:

$ python --help
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
...
-E     : ignore PYTHON* environment variables (such as PYTHONPATH)
-s     : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S     : don't imply 'import site' on initialization
...

单独或一起尝试,看看是否可以解决问题。单独地,您可以缩小它是由于 PYTHONPATH(单独 -E 会修复)还是通用 user-level 搜索(单独 -s 会修复)。


其他想法

我发现 Python 3.10 安装泄漏到 Python 3.8 解释器 运行 中很奇怪。通常,site 模块只加载匹配的主要+次要版本(例如,3.8 应该只选择另一个 3.8)。这可能表明正在发生其他事情。也许设置了 PYTHONPATH 环境? (真的不应该。)

一般来说,我不推荐使用base环境进行工作。这从未在 Anaconda 文档中记录,但许多 long-term Conda 用户通常在他们的 base 中断或 get 包过载之后才发现这是一个痛苦的事实他们升级 conda 包的时间过长。相反,创建一个新环境并默认激活它而不是 base.