不确定这是否是 pandas 问题,或者我对绝对/相对导入缺乏了解。
$ python -c "import pandas; print pandas.__version__"
0.17.1
$ python -V
Python 2.7.12 :: Anaconda 2.4.1 (x86_64)
# this runs fine (ie it doesn't raise exception)
$ mkdir x; echo "import pandas" > x/main.py; python x/main.py
# make io.py in same directory
$ touch x/io.py
# now it fails
$ python x/main.py
Traceback (most recent call last):
File "x/main.py", line 1, in <module>
import pandas
File "/Users/GS/anaconda/lib/python2.7/site-packages/pandas/__init__.py", line 13, in <module>
"extensions first.".format(module))
ImportError: C extension: StringIO not built. If you want to import pandas from
the source directory, you may need to run 'python setup.py build_ext --inplace'
to build the C extensions first.
我也尝试使用全新安装的 python(不是来自 anaconda)进行相同的操作,结果是相同的。
标准库中的其他文件名也会发生同样的情况,例如x/string.py
or x/re.py
.
将文件重命名为,例如x/my_io.py
正如下面的问题中所建议的,这是一种解决方法,但我想了解为什么会发生这种情况。
- PyCharm,某些包无法导入Pandas,ImportError:C扩展:StringIO未构建
为什么会发生这种情况?机制是什么?
这似乎发生在numpy
以及当有一个datetime.py
file.
这是一次测试一堆组合的代码片段(我在这里使用(非 Anaconda)python):
$ parallel -k -j1 "\
echo \"=== {1} : {2} ===\";\
rm -r x; \
mkdir -p x/y/z;\
echo \"import {1}; print \\\"ok\\\";\" > x/y/z/main.py;\
python x/y/z/main.py;\
touch x/y/z/{2}.py;\
python x/y/z/main.py;\
" ::: numpy pandas ::: os sys re io logging datetime
=== numpy : os ===
ok
ok
=== numpy : sys ===
ok
ok
=== numpy : re ===
ok
ok
=== numpy : io ===
ok
ok
=== numpy : logging ===
ok
ok
=== numpy : datetime ===
ok
Traceback (most recent call last):
File "x/y/z/main.py", line 1, in <module>
import numpy; print "ok";
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/__init__.py", line 180, in <module>
from . import add_newdocs
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/__init__.py", line 8, in <module>
from .type_check import *
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/__init__.py", line 14, in <module>
from . import multiarray
AttributeError: 'module' object has no attribute 'datetime_CAPI'
=== pandas : os ===
ok
ok
=== pandas : sys ===
ok
ok
=== pandas : re ===
ok
ok
=== pandas : io ===
ok
Traceback (most recent call last):
File "x/y/z/main.py", line 1, in <module>
import pandas; print "ok";
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/__init__.py", line 22, in <module>
from pandas.compat.numpy import *
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/compat/__init__.py", line 350, in <module>
from dateutil import parser as _date_parser
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/dateutil/parser.py", line 37, in <module>
from io import StringIO
ImportError: cannot import name StringIO
=== pandas : logging ===
ok
Traceback (most recent call last):
File "x/y/z/main.py", line 1, in <module>
import pandas; print "ok";
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/__init__.py", line 43, in <module>
from pandas.io.api import *
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/api.py", line 18, in <module>
from pandas.io.gbq import read_gbq
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/gbq.py", line 59, in <module>
logger = logging.getLogger('pandas.io.gbq')
AttributeError: 'module' object has no attribute 'getLogger'
=== pandas : datetime ===
ok
Traceback (most recent call last):
File "x/y/z/main.py", line 1, in <module>
import pandas; print "ok";
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/__init__.py", line 13, in <module>
__import__(dependency)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/__init__.py", line 180, in <module>
from . import add_newdocs
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/__init__.py", line 8, in <module>
from .type_check import *
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/__init__.py", line 14, in <module>
from . import multiarray
AttributeError: 'module' object has no attribute 'datetime_CAPI'