Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy-稀疏库导入错误:DLL加载失败:%1不是有效的Win32应用程序_Python_Scipy_X86 64_Importerror - Fatal编程技术网

Python Scipy-稀疏库导入错误:DLL加载失败:%1不是有效的Win32应用程序

Python Scipy-稀疏库导入错误:DLL加载失败:%1不是有效的Win32应用程序,python,scipy,x86-64,importerror,Python,Scipy,X86 64,Importerror,我最近将编程转移到64位Windows7机器上,并安装了相关的库。但是,我对Scipy-Sparse库有问题 我已经安装了适用于windows的scipy0.12.0-amd64-py27(因为我的python 2.7安装是64位版本),直接使用scipy库时,我没有遇到任何错误。e、 g import scipy print scipy.version 返回 <module 'scipy.version' from 'C:\Python27\lib\site-packages\scip

我最近将编程转移到64位Windows7机器上,并安装了相关的库。但是,我对Scipy-Sparse库有问题

我已经安装了适用于windows的scipy0.12.0-amd64-py27(因为我的python 2.7安装是64位版本),直接使用scipy库时,我没有遇到任何错误。e、 g

import scipy
print scipy.version
返回

<module 'scipy.version' from 'C:\Python27\lib\site-packages\scipy\version.pyc'>
我得到:

ImportError: DLL load failed: %1 is not a valid Win32 application.
遗憾的是,我的知识有限,似乎无法找到相关的解决方案。最接近的是我安装了错误的库,但是我不明白如果根scipy库工作正常,为什么会出现这种情况

有人知道这个问题的解决方案吗?或者使用一个直接安装了scipy的python windows包会更好吗

谢谢

编辑:

以下是错误的回溯:

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.
回溯(最近一次呼叫最后一次):
文件“C:\Users\Piers\Documents\Physics\PhD\Code\Far Time Crank Nicholson\FartTimeCrank Nicholson.py”,第16行,在
从scipy导入稀疏
文件“C:\Python27\lib\site packages\scipy\sparse\\uuuu init\uuuu.py”,第182行,在
从.csr导入*
文件“C:\Python27\lib\site packages\scipy\sparse\csr.py”,第15行,在
从.sparsetools导入csr\u tocsc、csr\u tobsr、csr\u count\u块\
文件“C:\Python27\lib\site packages\scipy\sparse\sparsetools\\uuuu init\uuuu.py”,第5行,在
从.csr导入*
文件“C:\Python27\lib\site packages\scipy\sparse\sparsetools\csr.py”,第26行,在
_csr=swig\u import\u helper()
文件“C:\Python27\lib\site packages\scipy\sparse\sparsetools\csr.py”,第22行,在swig\u import\u helper中
_mod=导入加载模块(“csr”、fp、路径名、说明)
ImportError:DLL加载失败:%1不是有效的Win32应用程序。

归根结底,这意味着
scipy.sparse
本身或它导入的东西要么是一个损坏的.DLL或.pyd文件,要么在加载时依赖于该文件,要么是一个结构错误的.DLL或.pyd文件

因此,有两个步骤来追踪这一点


首先,您需要找出引发此异常的实际.pyd/.DLL文件。不幸的是,Python2.7不会直接向您提供这些信息

您可以通过查看
ImportError
中的回溯来找出它-它应该是由链中最低的模块导入的东西。(如果您不理解回溯,请将其粘贴到您的答案中,希望其他人能告诉您。)

如果做不到这一点,您将不得不手动完成任务。您可以查看站点包中的源代码以
scipy/sparse/\uuuu init\uuuuu.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)
…问题在于
scipy.sparse.csr
,即
scipy/sparse/csr.py
无法加载
scipy.sparse.\u csr
,这几乎可以肯定是一个名为
\u csr.dll
\u csr.pyd
的文件,位于
scipy
目录中的某个位置。具体位置可能有点复杂,因为代码使用自定义路径名调用
imp.load\u模块
,而不是使用简单的
import
语句……但查找它应该不会太困难。(如果卡住了,在将路径名传递到
load\u模块之前,始终可以临时编辑
csr.py
print
打印路径名)

所以,这就是你需要检查的库


现在您实际负责
.pyd
/
.dll
文件,有两种可能性

首先,它本身可能会被破坏,或者是因为错误的体系结构(例如,32位而不是64位),等等

如果没有,则必须链接到另一个已损坏的.dll或错误的体系结构

该工具可以告诉您DLL是32位还是64位,是否损坏得太严重而无法加载,等等。它还可以为您提供库本身所依赖的所有DLL的列表,然后您可以检查这些DLL,直到找到问题为止


同时,如果你想知道你是怎么陷入这种情况的

在Windows上安装二进制Python包通常不会安装所需的依赖项,也不会检测到它们缺少依赖项,尤其是非Python依赖项。因此,在尝试使用需要这些依赖项的部分代码之前,您不会看到问题。在尽量减少这些问题方面做得很好(通常只需安装适当的MSVC可再发行版本,以及Numpy的Numpy MKL版本),但也有一些限制

同样,下载像Anaconda或Enthough这样的“科学Python发行版”要容易得多


或者,如果您从源代码(例如,通过)安装,则必须正确设置所有先决条件,否则安装将提前失败并告诉您出了什么问题。(有时它有点神秘——例如,如果您使用的是gcc工具链,但没有安装gfortran,则错误消息只会告诉您一些关于不准备编译config.f的信息……但至少您可以搜索这些信息,或者发布这些信息并立即得到答案。)

这里常见的问题是,
scipy.sparse
依赖的东西(作为Python
import
,或作为C DLL)损坏/错误(例如,32位的.pyd而不是64位的)。不幸的是,由于Python 2.7的导入逻辑的限制,很难告诉您(在第一种情况下,回溯可能告诉您,并且无论如何应该总是发布完整的回溯,但是在第二种情况下,没有更多的信息要被提供)。尝试安装C++重新分发,遗憾的是,它不起作用。为这个建议干杯
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)