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

Cha*_*iam 5 python zodb importerror pytest

运行PyTest文件包括ZODB一个奇怪的问题:ZODB可以导入,但其组件FileSystem不能.

import ZODB   # That works fine.
import ZODB.FileStorage
ImportError: No module named FileStorage
Run Code Online (Sandbox Code Playgroud)

另一方面,从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.没有奇怪的许可错误.经过一个小时的实验和锻炼Google-Fu,我一无所获.

任何解决方法将不胜感激.

好吧,我放弃了它,因为它"消失了".现在回来了.到目前为止我知道这个:

  • 这有时会出现在PyTest上,通常运行一个分析器.我还没找到解决办法.我不知道是什么原因造成的.我提出了一些问题,但没有追查.

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

我看到的事情:

  * 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
Run Code Online (Sandbox Code Playgroud)

没有用的东西:

  • 卸载并重新安装PyTest
  • 重启pycharm检查环境
  • 右键单击项目"clean compiled python files"
  • 首先运行常规python测试.
  • 在命令行中运行pytest在不同的目录中
  • 重新启动
  • Pip安装pytest-runner
  • 安装新的zzz版本
  • 运行'python setup.py install'
  • 将ZODB-5.2.4-py2.7.egg/EGG-INFO /移至ZODB-5.2.4-py2.7.egg-info

啊哈!线索!

系统中存在名为zzz.data.zodb.py的模块.我正在研究OS/X,它保留了大小写但不区分大小写.然而,在我的sys.modules中,我得到了"zzz.data.zodb"和"zzz.data.ZODB"的观点.并且我们可以让两个项目对齐但是对于案例而言是错误的吗?

我仍然想确定发生的事情的边缘情况.

A. *_*key 0

您是否尝试过以下操作:

from ZODB import FileStorage
Run Code Online (Sandbox Code Playgroud)