Pie*_*one 8 python x86-64 scipy importerror
我最近一直在将我的编程转移到64位Windows 7机器上,并且已经安装了相关的库.但是我遇到了Scipy - Sparse库的问题.
我已经为windows安装了scipy0.12.0-amd64-py27(因为我的python 2.7安装是64位版本),当直接使用scipy库时,我没有遇到任何错误.例如
import scipy
print scipy.version
Run Code Online (Sandbox Code Playgroud)
回报
<module 'scipy.version' from 'C:\Python27\lib\site-packages\scipy\version.pyc'>
Run Code Online (Sandbox Code Playgroud)
正如所料.
但是在尝试导入稀疏库时,如下所示:
from scipy import sparse
Run Code Online (Sandbox Code Playgroud)
我明白了:
ImportError: DLL load failed: %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)
可悲的是,我的知识有限,似乎无法找到相关的解决方案.最接近的是我安装了错误的库,但是如果root scipy库工作正常,我无法理解为什么会这样.
有谁知道这个解决方案?或者直接安装scipy的Windows使用其中一个python包会更好吗?
谢谢
编辑:
以下是错误的回溯:
Traceback (most recent call last):
File "C:\Users\Piers\Documents\Physics\PhD\Code\Far Time Crank-Nicholson\FarTimeCrankNicholson.py", line 16, in <module>
from scipy import sparse
File "C:\Python27\lib\site-packages\scipy\sparse\__init__.py", line 182, in <module>
from .csr import *
File "C:\Python27\lib\site-packages\scipy\sparse\csr.py", line 15, in <module>
from .sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\__init__.py", line 5, in <module>
from .csr import *
File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 26, in <module>
_csr = swig_import_helper()
File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 22, in swig_import_helper
_mod = imp.load_module('_csr', fp, pathname, description)
ImportError: DLL load failed: %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)
最终,这意味着它scipy.sparse本身或它导入的东西要么是依赖于加载时间,要么是依赖于破坏的.DLL或.pyd文件,要么是错误的体系结构.
因此,有两个步骤可以跟踪此情况.
首先,您需要确定哪个实际的.pyd/.DLL文件正在引发此异常.不幸的是,Python 2.7不会直接向您提供此信息.
您可以通过查看-it中的追溯来解决这个问题,这ImportError应该是import链中最低模块编写的内容.(如果您不理解回溯,请将其粘贴到您的答案中,并希望其他人可以告诉您.)
如果做不到这一点,你将不得不手动完成任务.您可以scipy/sparse/__init__.py在站点包中查看源代码,或者在存储库中在线查看它的作用,然后import逐个尝试.当您找到失败的那个时,查看其源代码,依此类推,直到到达树的底部.
既然你已经粘贴了追溯,我们可以从这部分说明:
File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 22, in swig_import_helper
_mod = imp.load_module('_csr', fp, pathname, description)
Run Code Online (Sandbox Code Playgroud)
......这个问题是scipy.sparse.csr,又名scipy/sparse/csr.py是无法加载scipy.sparse._csr,这几乎肯定是一个类似文件命名_csr.dll或者_csr.pyd,和内某处scipy的目录.究竟在哪里可能有点复杂,因为代码imp.load_module使用自定义路径名调用而不是使用简单的import语句...但找到它应该不会太难.(如果您遇到问题,你随时都可以临时修改csr.py,以print将其传递给之前的路径名load_module.)
那么,这就是你需要检查的库.
既然你.pyd/ .dll文件实际负责,有两种可能性.
首先,它本身可能被破坏,或者是错误的架构(例如,32位而不是64位)等.
如果没有,如果必须链接另一个.dll那个坏了或者错误的架构.
工具Dependency Walker可以告诉您DLL是32位还是64位,是否加载损坏太严重等等.它还可以为您提供库本身所依赖的所有DLL的列表,您可以然后检查,直到找到问题为止.
同时,如果你想知道你是如何进入这种情况的......
在Windows上安装二进制Python包通常不会安装它们所需的依赖项,或者检测它们是否缺失 - 特别是非Python依赖项.因此,在尝试使用需要这些依赖项的代码的某些部分之前,您不会看到问题.Christoph Gohkle在尝试最大限度地减少这些问题方面做得很好(通常只需安装适当的MSVC可再发行组件,Numpy-MKL版本的numpy,就是你所需要的),但是有一些限制.
由于该scipy网站解释说,这是一个更容易下载一个"科学的Python发行"像蟒蛇或Enthought.
或者,或者,如果您从源代码安装 - 例如,通过pip- 您将必须正确设置所有先决条件,否则安装将提前失败并告诉您哪里出错了.(有时它有点神秘 - 例如,如果你使用gcc工具链但没有安装gfortran,错误信息只是告诉你一些关于不要编译config.f ...但至少它是你可以搜索的东西,或在SO上发布并立即得到答案.)
| 归档时间: |
|
| 查看次数: |
10430 次 |
| 最近记录: |