Py2Exe,[Errno 2] 没有这样的文件或目录:'numpy-atlas.dll'

10

我在我的程序中包含了matplotlib,我在谷歌上搜索numpy_atlas.dll,似乎只有我遇到了这个问题。

setup.py

from setuptools import setup
import py2exe

setup(console=['EulerMethod.py'])

运行Py2Exe时出现错误

C:\(..obmitted..)>python setup.py py2exe
running py2exe
*** searching for required modules ***
*** parsing results ***
......
...obmitted...
......
*** finding dlls needed ***
error: [Errno 2] No such file or directory: 'numpy-atlas.dll'

这个问题是在我重新安装Python后出现的。在那之前,我的脚本一直运行得很好。我发现文件位于C:\ Anaconda2 \ Lib \ site-packages \ numpy \ core,但py2exe因某种原因找不到它。以前我使用python(x,y),但现在我换成了Anaconda(仍然是python 2.7.x)。 - kjgregory
3个回答

17

以下是我使用的方法。 我找到了dll文件:C:\Python27\Lib\site-packages\numpy\core\numpy-atlas.dll 并将其复制到与setup.py相同的文件夹中。


无法确认,但听起来是合法的。 - Louis Hong
可以确认,被接受的答案没有起作用,但这个答案有效。我在升级到numpy 1.11后遇到了这个错误。 - mattrweaver
Atlas不是numpy的必要条件,因此这对于所有用户都不起作用。 - bremen_matt
@bremen_matt,问题明确说明了numpy_atlas丢失,所以答案是正确的。 - max

13
我遇到了同样的问题。经过一些测试,将numpy.core目录添加到sys.path中似乎有效。
from distutils.core import setup
import py2exe

import numpy
import os
import sys

# add any numpy directory containing a dll file to sys.path
def numpy_dll_paths_fix():
    paths = set()
    np_path = numpy.__path__[0]
    for dirpath, _, filenames in os.walk(np_path):
        for item in filenames:
            if item.endswith('.dll'):
                paths.add(dirpath)

    sys.path.append(*list(paths))

numpy_dll_paths_fix()
setup(...)

我也试过了,有效。 - Antoine Gautier
对我有用! - Jaroslaw Piskorski
1
这个方法很好用,而且不需要手动复制dll到应用程序文件夹的优点。 - maurobio

0

看起来 py2exe 找不到 dll。 下面的脚本会让 py2exe 保持安静:

distutils.core.setup(
options = {
    "py2exe": {
        "dll_excludes": ["MSVCP90.dll"]
    }
},
...

)

你仍然需要确保dll文件在用户的机器上。我相信numpy-atlas.dll是matplot依赖项之一。

如果其他方法都失败了,还可以考虑使用PyInstaller。


你知道怎样打包exe文件并将所有的依赖都包含在内吗? - Louis Hong
1
我不知道你的答案是否可行,但PyInstaller绝对是令人惊叹的工具。也许你可以把这个工具加入你的回答中,我会选择它。 - Louis Hong
当然可以。很高兴能帮到你。 - frainfreeze
1
我刚刚遇到了这个错误,但是我已经在我的设置脚本中加入了这行代码:"dll_excludes": ["MSVCP90.dll"]。令人沮丧的是,每当我重新访问这个脚本时,似乎都过了一段时间,它就会出现另一个随机的缺失dll文件,尽管上一次我能够在没有numpy-atlas.dll文件的情况下运行py2exe,并且我没有对应用程序的依赖关系做出重大更改。还有其他人有类似的经历吗?我之前排除了PyInstaller,因为它与Canopy Python不兼容,但也许我应该再试一次... - J Jones
"dll_excludes": ["MSVCP90.dll"] 仅排除 MSVCP90.dll。您必须自己添加其他要排除的文件。 - frainfreeze
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接