重新加载SciPy时出错

2 投票
2 回答
1630 浏览
提问于 2025-04-17 22:58

运行下面的 my_script.py 时,在重新加载的过程中出现了一个错误,最后的错误信息是:

ImportError: No module named moves

这个错误似乎是由以下这行代码引发的:

from scipy.lib.six.moves import xrange

在文件 scipy/stats/stats.pyc 中。请问这可能是个bug吗?还是说我的安装有问题?

my_script.py:

import my_package.my_module as my_module
reload(my_module)

my_module.py:

from scipy.stats import gaussian_kde

下面是完整的错误追踪信息:

Reloading dx_stats.scipy
Reloading scipy
Reloading __future__
Reloading numpy
Reloading numpy.__config__
Reloading numpy.version
Reloading numpy._import_tools
Reloading os
Reloading errno
Reloading posix
Reloading posixpath
Reloading stat
Reloading genericpath
Reloading warnings
Reloading linecache
Reloading types
Reloading _warnings
Reloading UserDict
Reloading _abcoll
Reloading abc
Reloading _weakrefset
Reloading _weakref
Reloading copy_reg
Reloading numpy.testing
Reloading unittest
Reloading unittest.result
Reloading unittest.os
Reloading unittest.sys
Reloading unittest.traceback
Reloading traceback
Reloading unittest.StringIO
Reloading StringIO
Reloading unittest.functools
Reloading functools
Reloading _functools
Reloading unittest.case
Reloading unittest.collections
Reloading collections
Reloading _collections
Reloading operator
Reloading keyword
Reloading heapq
Reloading itertools
Reloading _heapq
Reloading thread
Reloading unittest.difflib
Reloading difflib
Reloading re
Reloading sre_compile
Reloading _sre
Reloading sre_parse
Reloading sre_constants
Reloading unittest.pprint
Reloading pprint
Reloading cStringIO
Reloading unittest.re
Reloading unittest.types
Reloading unittest.warnings
Reloading unittest.util
Reloading unittest.suite
Reloading unittest.loader
Reloading unittest.fnmatch
Reloading fnmatch
Reloading unittest.main
Reloading unittest.signals
Reloading unittest.signal
Reloading signal
Reloading unittest.weakref
Reloading weakref
Reloading exceptions
Reloading unittest.runner
Reloading unittest.time
Reloading time
Reloading numpy.testing.utils
Reloading numpy.testing.nosetester
Reloading numpy.compat
Reloading numpy.compat._inspect
Reloading numpy.compat.py3k
Reloading numpy.core
Reloading numpy.core.info
Reloading numpy.core.numeric
Reloading numpy.core.umath
Reloading numpy.core.numerictypes
Reloading numpy.core.multiarray
Reloading cPickle
Reloading numpy.core._dotblas
Reloading numpy.core.arrayprint
Reloading numpy.core.fromnumeric
Reloading numpy.core.records
Reloading numpy.core.defchararray
Reloading numpy.core.memmap
Reloading numpy.core.function_base
Reloading numpy.core.machar
Reloading numpy.core.getlimits
Reloading numpy.core.shape_base
Reloading numpy.testing.numpytest
Reloading numpy.lib
Reloading math
Reloading numpy.lib.info
Reloading numpy.lib.type_check
Reloading numpy.lib.ufunclike
Reloading numpy.lib.index_tricks
Reloading numpy.matrixlib
Reloading numpy.matrixlib.defmatrix
Reloading numpy.lib.function_base
Reloading numpy.lib.twodim_base
Reloading numpy.lib._compiled_base
Reloading numpy.lib.utils
Reloading numpy.lib.stride_tricks
Reloading numpy.lib.nanfunctions
Reloading numpy.lib.shape_base
Reloading numpy.lib.polynomial
Reloading numpy.linalg
Reloading numpy.linalg.info
Reloading numpy.linalg.linalg
Reloading numpy.lib.arraysetops
Reloading numpy.lib.npyio
Reloading numpy.lib._datasource
Reloading shutil
Reloading pwd
Reloading grp
Reloading numpy.lib._iotools
Reloading future_builtins
Reloading numpy.lib.financial
Reloading numpy.lib.arrayterator
Reloading numpy.lib.arraypad
Reloading numpy.random
Reloading numpy.random.info
Reloading numpy.random.mtrand
Reloading numpy.fft
Reloading numpy.fft.info
Reloading numpy.fft.fftpack
Reloading numpy.fft.helper
Reloading numpy.lib.scimath
Reloading scipy.__config__
Reloading scipy.version
Reloading scipy.stats
Reloading scipy.stats.stats
Reloading scipy.lib
Reloading scipy.lib.six
Reloading scipy.lib.operator
Reloading scipy.lib.sys
Reloading scipy.lib.types
Reloading scipy.lib.StringIO
Reloading scipy.lib.six.moves

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-5f8b4764607d> in <module>()

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in reload(module, exclude)
    329     try:
    330         with replace_import_hook(deep_import_hook):
--> 331             ret = deep_reload_hook(module)
    332     finally:
    333         found_now = {}

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in deep_reload_hook(m)
    299 
    300     try:
--> 301         newm = imp.load_module(name, fp, filename, stuff)
    302     except:
    303          # load_module probably removed name from modules because of

/Users/josh/code/reps/sandbox/utils/py_packages/team/pdf_histograms.pyc in <module>()
      2 # import matplotlib.pyplot as plt
      3 import scipy
----> 4 from scipy.stats import gaussian_kde
      5 
      6 # # from avr_utils.debugging import *

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in deep_import_hook(name, globals, locals, fromlist, level)
    244     tail = head
    245     while name:
--> 246         tail, name, buf = load_next(tail, tail, name, buf)
    247 
    248     # If tail is None, both get_parent and load_next found

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in load_next(mod, altmod, name, buf)
    144     buf += subname
    145 
--> 146     result = import_submodule(mod, subname, buf)
    147     if result is None and mod != altmod:
    148         result = import_submodule(altmod, subname, subname)

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in import_submodule(mod, subname, fullname)
    189 
    190         try:
--> 191             m = imp.load_module(fullname, fp, filename, stuff)
    192         except:
    193             # load_module probably removed name from modules because of

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/scipy/stats/__init__.pyc in <module>()
    322 from __future__ import division, print_function, absolute_import
    323 
--> 324 from .stats import *
    325 from .distributions import *
    326 from .rv import *

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in deep_import_hook(name, globals, locals, fromlist, level)
    240     parent, buf = get_parent(globals, level)
    241 
--> 242     head, name, buf = load_next(parent, None if level < 0 else parent, name, buf)
    243 
    244     tail = head

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in load_next(mod, altmod, name, buf)
    144     buf += subname
    145 
--> 146     result = import_submodule(mod, subname, buf)
    147     if result is None and mod != altmod:
    148         result = import_submodule(altmod, subname, subname)

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in import_submodule(mod, subname, fullname)
    189 
    190         try:
--> 191             m = imp.load_module(fullname, fp, filename, stuff)
    192         except:
    193             # load_module probably removed name from modules because of

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/scipy/stats/stats.pyc in <module>()
    232 import math
    233 
--> 234 from scipy.lib.six.moves import xrange
    235 
    236 # friedmanchisquare patch uses python sum

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in deep_import_hook(name, globals, locals, fromlist, level)
    244     tail = head
    245     while name:
--> 246         tail, name, buf = load_next(tail, tail, name, buf)
    247 
    248     # If tail is None, both get_parent and load_next found

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/IPython/lib/deepreload.pyc in load_next(mod, altmod, name, buf)
    151 
    152     if result is None:
--> 153         raise ImportError("No module named %.200s" % name)
    154 
    155     return result, next, buf

ImportError: No module named moves

我正在使用:

> python --version
Python 2.7.6 :: Anaconda 1.8.0 (x86_64)

以下是我的 pip freeze 输出:

$ pip freeze
Cython==0.19.2
Flask==0.10.1
Jinja2==2.7.1
MDP==3.3
MarkupSafe==0.18
PIL==1.1.7
PyAudio==0.2.7
PySAL==1.6.0
PyYAML==3.10
Pygments==1.6
SQLAlchemy==0.8.3
Sphinx==1.1.3
Theano==0.6.0
VTK==5.10.1
Werkzeug==0.9.4
appnope==0.0.6-dev
apptools==4.2.0
astropy==0.2.5
atom==0.3.4
beautifulsoup4==4.3.1
binstar==0.3.0
biopython==1.62
bitarray==0.8.1
blaze==0.2dev
bokeh==unknown
boto==2.15.0
casuarius==1.1
chaco==4.3.0
colorama==0.2.7
configobj==4.7.2
cubes==0.10.2
cvxopt==1.1.6
distribute==0.6.45
docutils==0.11
enable==4.3.0
enaml==0.8.3
envisage==4.3.0
epc==0.0.5
gevent==0.13.8
gevent-websocket==0.3.6
gevent-zeromq==0.2.2
greenlet==0.4.1
grin==1.2.1
h5py==2.2.0
ipython==1.2.1
itsdangerous==0.23
jedi==0.7.0
keyring==3.2
llvmmath==0.1
llvmpy==0.12.0
lxml==3.2.3
matplotlib==1.3.1
mayavi==4.3.0
memory-profiler==0.31
meta==development
netCDF4==1.0.6
networkx==1.8.1
nltk==2.0.4
nose==1.3.0
numba==0.11.0
numexpr==2.3.1
numpy==1.8.0
openpyxl==1.6.2
pandas==0.13.1
patsy==0.2.1
pep8==1.4.6
ply==3.4
praw==2.1.12
psutil==1.1.2
psycopg2==2.5.1
py==1.4.17
py4j==0.8.1
pycosat==0.6.0
pycparser==2.09.1
pycrypto==2.6.1
pycurl==7.19.0
pyface==4.3.0
pyflakes==0.7.3
pykit==0.1
pymc==2.3
pyparsing==1.5.6
pysam==0.6
pytest==2.4.2
python-cjson==1.0.5
python-dateutil==1.5
pytz==2013b
pyzmq==2.2.0.1
qds-sdk==1.0.10-beta
redis==2.7.2
requests==1.2.3
rope==0.9.4
scikit-image==0.9.3
scikit-learn==0.14.1
scipy==0.13.3
sexpdata==0.0.3
six==1.5.2
spyder==2.2.5
statsmodels==0.5.0
sympy==0.7.4.1
tables==3.0.0
tornado==3.1.1
traits==4.3.0
traitsui==4.3.0
update-checker==0.8
wsgiref==0.1.2
xlrd==0.9.2
xlwt==0.7.5

2 个回答

0

使用Ubuntu系统?可以试试这个:

sudo apt-get install python-six

如果这个方法不行,你可以尝试从源代码编译Scipy(在GitHub上最新的源代码没有解决我的问题,也许你可以试试0.13.3版本,可以从http://mail.scipy.org/pipermail/scipy-user/2014-February/035419.html下载)。

我是这样解决的:

  • 从最新的源代码构建安装
  • 更新python-six
1

你现在用的SciPy版本是0.13.3,这个版本在处理scipy.lib.six.moves时做了一些“魔法”。实际上,scipy.lib.six.moves并不是存放在scipy/lib/six/这个文件夹里的,而是直接被加载到Python解释器的内存中,所以可能会出现一些奇怪的互动。

在你的代码中,如果不重新加载my_module,这可能就是你遇到问题的原因。

我用的是SciPy 0.14,运行你的代码时没有发现任何问题,所以升级一下版本也许能解决你的问题。

撰写回答