在ZODB的子系统上导入错误,但仅适用于Py.Test

时间:2017-09-07 23:20:03

标签: python pytest importerror zodb

使用包含PyTest的文件运行ZODB会产生一个奇怪的问题:ZODB可以导入,但其组件FileSystem不能导入。

import ZODB   # That works fine.
import ZODB.FileStorage
ImportError: No module named FileStorage

另一方面,从Python解释器运行相同的代码运行正常。

这是版本PyTest version 3.2.2, Python 2.7.13, and ZODB 5.2.4 存在ZODB-5.2.4-py2.7.egg/ZODB/FileStorage/init.py, a ZODB.pth指向蛋,没有其他模块有问题;只是ZODB的任何子模块。没有奇怪的许可错误。经过一个小时的实验和锻炼谷歌之后,我一无所获。

任何解决方法都将受到赞赏。

好吧,我放弃了它,因为它已经消失了#39;现在回来了。到目前为止,我知道这一点:

  • 有时会出现PyTest,通常运行一个分析器。我还没有找到解决办法。我没有 知道原因是什么。我提出了一些问题,但无法追踪它。

    File "/Users/cmerriam/p/platform/zzz/data/ZODB.py", line 41, in <module>
    import ZODB.FileStorage                                 # flake8: noqa
    ImportError: No module named FileStorage
    

我看到的事情:

  * Same issue from PyCharm or command line.
  * No issue running normal code from PyCharm or command line.
  * Once it starts to be an issue, it continues.  Still don't know why.
  * Once it goes away it stays away.
  * My edit configuration has a warning "No Py.Test runner found for current configuration", though 
  /opt/zzz/bin/py.test is in path
  * Seems to have occurred after a reboot.
  * No reason, at all, to suspect FileStorage.
  * This is in my ...../site-packages directory:


        $ ls -l ZODB*
        -rw-rw-r--  1 cmerriam  zzz  23 Oct  6 18:08 ZODB.pth

        ZODB-5.2.4-py2.7.egg:
        total 0
        drwxr-xr-x   9 cmerriam  zzz   306 Oct  6 18:08 EGG-INFO/
        drwxr-xr-x  74 cmerriam  zzz  2516 Oct  9 15:58 ZODB/


        $ cd ZODB-5.2.4-py2.7.egg
        $ tree
           |-EGG-INFO
           |-ZODB
           |---FileStorage
           |---__pycache__
           |---scripts
           |-----manual_tests
           |-----tests
           |---tests

尚未成功的事情:

  • 卸载并重新安装PyTest
  • 重新启动pycharm检查环境
  • 右键单击项目&#34;清理已编译的python文件&#34;
  • 首先运行常规python测试。
  • 从命令行在不同目录中运行pytest
  • 重新启动
  • Pip安装pytest-runner
  • 安装新的zzz版本
  • 运行&#39; python setup.py install&#39;
  • 将ZODB-5.2.4-py2.7.egg / EGG-INFO /移至ZODB-5.2.4-py2.7.egg-info

啊哈!一个CLUE!

系统中存在一个名为zzz.data.zodb.py的模块。我正在开发OS / X,它保留了大小写,但不区分大小写。然而,我同时得到了&#34; zzz.data.zodb&#34;和&#34; zzz.data.ZODB&#34;在我的sys.modules中。我们可以让两个项目对齐但是情况确实是错误的吗?

我仍然希望确定所发生事件的边缘情况。

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下操作:

from ZODB import FileStorage

答案 1 :(得分:-1)

尝试某事如下面的另一个答案所述:

  

@A。迪基 -

     

来自ZODB导入FileStorage

在评论中描述:

  

@nes -
  也许同名的模块位于sys.path中。尝试查看哪些文件模块使用import ZODB; print(ZODB.__file__)