使用新版本Python(>=2.6)可能遇到如下错误,在动态链接的时候,ERROR: Failure: ImportError (DLL load failed: 找不到指定的模块。)

2009-08-30 17:29 | 分类:Python, 未分类, 编程语言 | 标签:, , , , , | 作者:lyg | 456 views

ERROR: Failure: ImportError (DLL load failed: 找不到指定的模块。)

 

如果遇到此种之错误,或是类似,那么

Traceback (most recent call last):
  File "D:\Tools\Building\Python\lib\site-packages\nose-0.11.1-py2.6.egg\nose\loader.py", line 379, in loadTestsF
    addr.filename, addr.module)
  File "D:\Tools\Building\Python\lib\site-packages\nose-0.11.1-py2.6.egg\nose\importer.py", line 39, in importFro
    return self.importFromDir(dir_path, fqname)
  File "D:\Tools\Building\Python\lib\site-packages\nose-0.11.1-py2.6.egg\nose\importer.py", line 86, in importFro
    mod = load_module(part_fqname, fh, filename, desc)
  File "D:\svn\hgsubversion\tests\test_fetch_renames.py", line 4, in <module>
    import test_util
  File "D:\svn\hgsubversion\tests\test_util.py", line 20, in <module>
    from hgsubversion import util
  File "D:\svn\hgsubversion\hgsubversion\__init__.py", line 40, in <module>
    from svn import core
  File "D:\Tools\Building\Python\lib\site-packages\svn\core.py", line 19, in <module>
    from libsvn.core import *
  File "D:\Tools\Building\Python\lib\site-packages\libsvn\core.py", line 5, in <module>

ERROR: Failure: ImportError (DLL load failed: 找不到指定的模块。)

 

 

比如此时,最后一条语句

  File "D:\Tools\Building\Python\lib\site-packages\libsvn\core.py", line 5, in <module>

表明当中的dll文件找不到,一般是不小心吧不应该命名成pyd的文件命名成了pyd。

 

比如当前libsvn下包含了如下文件

卷序列号为 284E-138E
D:.
    client.py
    client.pyc
    core.py
    core.pyc
    delta.py
    delta.pyc
    diff.py
    fs.py
    libsvn_swig_py-1.dll
    ra.py
    ra.pyc
    repos.py
    wc.py
    wc.pyc
    _client.pyd
    _core.pyd
    _delta.pyd
    _diff.pyd
    _fs.pyd
    _ra.pyd
    _repos.pyd
    _wc.pyd
    __init__.py
    __init__.pyc

 

这个是可以正常运行的文件结构

其中.pyd文件结尾的文件其实均是dll文件,只是rename了

但是为何    libsvn_swig_py-1.dll却没有重命名呢?

这里是有一个问题在里面的。。

首先。凡是已pyd 文件结尾为的都是.py文件里面直接import的

比如_core.pyd 在 core.py 里面有 import _core 这样的语句

而所有dll文件是不会直接被python调用的,所以必须添加到PATH路径里面,就是说只能够间接被.pyd文件应用,而不能直接被.pyd直接引用。

 

因此,如果下载的包中,诸如_core.dll _fs.dll 这种以_开头的大约是要被py文件引用的,所以要重命名为.pyd文件

而诸如libsvn_swig_py-1.dll文件则不能命名为.pyd文件后缀,同时这些文件所处的路径要添加到PATH中,否则会找不到。。

 

还有一个重要问题,就是程序的位不匹配,比如32为之于64为,这也是要重点考虑的,所以

在这种情况之下,要使用32位的,因为很多app都没有64位版本。。。。。

除非可以确定整个程序链都是64位的,这样才可以使用64位的程序

比如我就在这里遇到麻烦了,我用的subversion是64位的,python是64为的,

可是有一个东西不是,那就是subversion python bind 不是,所以无法正常的运行,也会出现这种load错误

就是说动态链接库也要是64位的才能够正常工作,dll hell

综上所述,就是这样子了。

发表您的评论

您的名字:

您的邮箱: (*不会被公布

您的网站: