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

Posted

技术标签:

【中文标题】Centos 6.6,python 2.7.2 对象没有属性\'StringIO【英文标题】:Centos 6.6, python 2.7.2 object has no attribute 'StringIOCentos 6.6,python 2.7.2 对象没有属性'StringIO 【发布时间】:2016-02-28 20:47:50 【问题描述】:

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

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'

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

我尝试在 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”的代码模块 (!!!大写!!!)隐藏内置“io” 我的“本地”MacOS FS 不区分大小写,但会保留大小写,它区分 io 和 IO,这就是我在本地获得正确“io”的原因。 服务器具有区分大小写的 FS Docker 映像具有不区分大小写的 FS。这就是为什么它只在那里失败的原因。

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

【问题讨论】:

我猜你的开发系统上有一个名为io.py 的本地模块,但它不在服务器上。它隐藏了内置的 io 模块,因此您在该模块中找不到您期望的东西。 我认为@Blckknght 是对的。您可以通过 print io.__file__ 查看导入模块的路径,以确保导入了正确的模块。 嗯...会尝试,我只在 docker 中看到 io.StringIO 问题。服务器/开发笔记本电脑没有这样的问题。 请查看更新后的问题,你是对的...... 你可以把它放在另一个包中,而不是重命名模块,这样它总是限定为foo.io而不是io 【参考方案1】: @Blckknght 是对的,有一个名为“IO”的代码模块(!!!大写!!!)隐藏了内置的“io” 我的“本地”MacOS FS 不区分大小写,但会保留大小写,它区分 io 和 IO,这就是我在本地获得正确“io”的原因。 服务器具有区分大小写的 FS Docker 映像具有不区分大小写的 FS。这就是为什么它只在那里失败。

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

【讨论】:

以上是关于Centos 6.6,python 2.7.2 对象没有属性'StringIO的主要内容,如果未能解决你的问题,请参考以下文章

在Linux CentOS 6.6上安装Python 2.7.9

在Linux CentOS 6.6上安装Python 2.7.9

centos 6.6 安装python

yum 在 CentOS 6.6 上哪里安装 python?

centos 7 python3.6.6的编译安装

python3.6.6在CentOS7上的安装