【问题标题】:Importing numpy gives ImportError: cannot import name TestCase导入 numpy 给出 ImportError: cannot import name TestCase
【发布时间】:2023-03-17 19:55:02
【问题描述】:

我正在使用 Windows XP Professional 远程桌面服务器。大约 2 小时前 numpy 仍在那里工作。我试图使用mulitprocessing.Pool() 并行化 for 循环,但我一定做错了什么,因为在短时间内运行了 100 个 python.exe 进程。我花了一些时间才重新回到服务器上,我想测试为什么所有这些进程都会被创建。但是,我遇到了以下错误:

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\numpy\__init__.py", line 154, in <module>
    import add_newdocs
  File "C:\Python27\lib\site-packages\numpy\add_newdocs.py", line 9, in <module>

    from numpy.lib import add_newdoc
  File "C:\Python27\lib\site-packages\numpy\lib\__init__.py", line 4, in <module
>
    from type_check import *
  File "C:\Python27\lib\site-packages\numpy\lib\type_check.py", line 8, in <modu
le>
    import numpy.core.numeric as _nx
  File "C:\Python27\lib\site-packages\numpy\core\__init__.py", line 45, in <modu
le>
    from numpy.testing import Tester
  File "C:\Python27\lib\site-packages\numpy\testing\__init__.py", line 8, in <mo
dule>
    from unittest import TestCase
ImportError: cannot import name TestCase

我可以导入unittest.py,但是我不能导入TestCase:

>>> import unittest
>>> from unittest import TestCase
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name TestCase

我从 Eclipse 运行 python 与从命令行运行它时遇到同样的问题。但是,当使用不同的 Python(也是 2.7,但 32 位)时,它确实可以工作。

我首先尝试重新安装 numpy,但这并没有解决问题。我发现的唯一其他解决方案是the answerthis question。但是,我已经查看并删除了所有 unittest.py 文件,但我仍然遇到同样的问题。我不知道下一步该尝试什么。

【问题讨论】:

  • 具体来说,在Python27\Lib\unittest\__init__.py 中,第47 行应该是__all__ = [TestCase>],并且TestCase应该在case.py中定义
  • unittest.__file__ 是否指向它应该指向的位置?如果是这样,并且指向.pyc 文件,请尝试先删除pyc
  • @NiekdeKlein 很遗憾,我不确定您是否必须重新安装所有内容。
  • @Zhenya 删除它指向的__init__.pyc 文件,重新启动python 并执行import unittestfrom unittest import TestCase 解决了问题,谢谢!你知道这是怎么发生的吗?您能否写下您的评论作为答案,以便我接受?
  • @CodyPiersall 我也很想回答“为什么”这个问题。

标签: python numpy import


【解决方案1】:

(从 cmets 中移出)

显然,.pyc 文件可能会过时。报价 http://nedbatchelder.com/blog/201310/finding_stale_pyc_files.html:

最近我正在调试其中一种“不可能发生”的 问题,并想确保我没有任何陈旧的 .pyc 文件 躺着。

因此,首先要检查正在导入的内容:print(unittest.__file__)。您已经检查过它不是工作目录中的流浪unittest.py。好的。如果是.pyc 文件,请尝试删除它。不会有任何伤害,下次导入时会重新生成。

我不得不承认我对“为什么”这个问题没有明智的答案。如果有人比我更有知识可以回答,我很乐意投票并删除这个答案。

【讨论】:

  • +1 用于解决 OP 的问题并让我意识到 .pyc 文件可能存在问题。我仍然对为什么感兴趣;希望有人能启发我们。
  • @CodyPiersall 确实应该归功于 Ned --- 我所知道的一切都来自他的帖子。
  • 如果有人有同样的问题,在删除 .pyc 文件后,如果你还在 python shell 中,你首先必须退出()并再次启动 python,然后再导入 unittest。当我在多处理我使用 numpy 的应用程序时不小心制造了一个 fork 炸弹时,我遇到了这个问题,由于一些错误(不知道是哪个错误),我产生了数百个 python 实例,我必须将其杀死。可能由于进程在导入过程中被杀死,.pyc 没有完全创建完成?
  • @NiekdeKlein 在重启解释器工作时,reload(unittest); from unittest import TestCase 可能就足够了。
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多