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。这就是为什么它只在那里失败的原因。
这是一个很好的挑战,谢谢 :)
- @Blckknght 是对的,有一个名为"IO"(!!!uppercase!!!)的代码模块隐藏了内置的"io"
- 我的 "local" MacOS FS 不区分大小写,但保留大小写,它区分 io 和 IO,这就是我在本地得到正确 "io" 的原因。
- 服务器有区分大小写的 FS
- Docker 图片不区分大小写 FS。这就是为什么它只在那里失败的原因。
这是一个很好的挑战,谢谢 :)
我正在尝试 运行 我的 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。这就是为什么它只在那里失败的原因。
这是一个很好的挑战,谢谢 :)
- @Blckknght 是对的,有一个名为"IO"(!!!uppercase!!!)的代码模块隐藏了内置的"io"
- 我的 "local" MacOS FS 不区分大小写,但保留大小写,它区分 io 和 IO,这就是我在本地得到正确 "io" 的原因。
- 服务器有区分大小写的 FS
- Docker 图片不区分大小写 FS。这就是为什么它只在那里失败的原因。
这是一个很好的挑战,谢谢 :)