Centos 6.6, python 2.7.2 对象没有属性 'StringIO

Centos 6.6, python 2.7.2 object has no attribute 'StringIO

我正在尝试 运行 我的 python 测试在 docker 容器中。这是使用 CentsOS 6.6 安装 python .2.7.2 的 Docker 文件的一部分:

RUN cd /tmp && \
    wget https://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz && \
    tar xvfz Python-2.7.2.tgz && \
    cd Python-2.7.2 && \
    ./configure --prefix=/usr/local && \
    make && \
    make altinstall

RUN ln -s /usr/local/bin/python2.7 /usr/local/bin/python

RUN wget https://bootstrap.pypa.io/ez_setup.py -O - | /usr/local/bin/python2.7
RUN /usr/local/bin/easy_install-2.7 pip
RUN pip install python-gflags sqlparse pyyaml requests HTTPretty

我在 运行 在 docker 容器中进行测试时遇到异常:

import io
# some code here...
buf = io.StringIO(data)
AttributeError: 'module' object has no attribute 'StringIO'

运行ning 在本地或服务器环境中测试时,我没有遇到此异常。

我尝试在 docker 容器中执行简单脚本:

import io
print io.StringIO(None)

工作正常。我很困惑。这可能是什么问题?

@Blckknght,你是对的,代码中有名为 io 的模块:

io.__file__ ::: /root/containerfolder/proejct/py/src/common/io.pyc。但我只能在 docker 中复制它。当我将代码复制粘贴到 服务器 或 运行 时 在本地 ,我做对了

io.__file__ ::: /opt/py/ext/python-2.7.2/lib/python2.7/io.pyc

除了重命名模块之外,修复它的正确方法是什么:)?

答案:

这是一个很好的挑战,谢谢 :)

  • @Blckknght 是对的,有一个名为"IO"(!!!uppercase!!!)的代码模块隐藏了内置的"io"
  • 我的 "local" MacOS FS 不区分大小写,但保留大小写,它区分 io 和 IO,这就是我在本地得到正确 "io" 的原因。
  • 服务器有区分大小写的 FS
  • Docker 图片不区分大小写 FS。这就是为什么它只在那里失败的原因。

这是一个很好的挑战,谢谢 :)