【问题标题】:Error 2 (No Such File) in py2exe dist folder for wordcloud's stopwordswordcloud 停用词的 py2exe dist 文件夹中的错误 2(无此类文件)
【发布时间】:2017-05-21 07:15:09
【问题描述】:

我有一个创建词云的程序,我正在尝试使用 py2exe 将模块 wordcloud 包含到 .exe 中,但是我在 dist 文件夹中的 library.zip 文件中观察到 py2exe 收集所有 .pyd 和 . pyc 除了那些没有扩展文件的。 wordcloud模块的stopwords文件在某种意义上是不能被py2exe打包的,但它是执行WordCloud()的必要文件。

我的第一个方法是将停用词文件重命名为 .txt,我重新运行代码,它给了我一个 Errno2,它无法找到 stopwords.txt 文件。所以我把它恢复到原来的形式,没有扩展的那个。

我的第二种方法是在 py2exe setup.py 中将 soprword 文件包含到 my_datafile 中:

from distutils.core import setup
import py2exe,sys,os
import matplotlib
import wordcloud
import matplotlib.backends.backend_tkagg

sys.setrecursionlimit(5000)
Mydata_files =[('file', ['C:\\Python27\Lib\\site-packages\\wordcloud\\stopwords.*'])]
Mydata_files.extend(matplotlib.get_py2exe_datafiles())
setup(
    console=['._ProbMod_.py'],
    data_files = Mydata_files,
    options={
        'py2exe': {
            'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','scipy.sparse.csgraph._validation','sklearn.utils.weight_vector','sklearn.utils.lgamma','FileDialog',
                          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg']
        }
    }
)

结果一样,Errno 2,在library.zip文件中找不到停用词文件。

我的第三种方法是在 py2exe 的“包含”函数中包含 wordcloud 模块:

from distutils.core import setup
import py2exe,sys,os
import matplotlib
import wordcloud
import matplotlib.backends.backend_tkagg

sys.setrecursionlimit(5000)
setup(
    console=['._ProbMod_.py'],
    data_files = matplotlib.get_py2exe_datafiles(),
    options={
        'py2exe': {
            'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','scipy.sparse.csgraph._validation','sklearn.utils.weight_vector','sklearn.utils.lgamma','FileDialog',
                          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg','wordcloud']
        }
    }
)

仍然 Errno 2 仍然存在。

最后一种方法是手动将停用词复制到 library.zip 文件中的 wordcloud 文件夹中,不幸的是,它也不起作用。

有谁知道如何告诉 py2exe 将所有文件包含在站点包模块文件夹中,而不仅仅是打包 .pyc 和 .pyd?

【问题讨论】:

  • (C:\\Python27\Lib\\site-packages\\wordcloud\\stopwords.FILE 不确定我理解。首先我看到在字符串的开头有一个( 太多了。二是解释混乱。你说文件只叫file.,但字符串说它叫stopwords.FILE。是哪一个?
  • 您好,zorberg 非常感谢您的回复。我重新编辑了我的问题。
  • C:\\Python27\Lib\\site-packages\\wordcloud\\stopwords') 现在你又搞砸了,但不同的是。 :D 无论如何,没有扩展名的文件通常由“文件名”寻址。末尾的点表示没有后缀。那么,我猜'C:\\Python27\Lib\\site-packages\\wordcloud\\stopwords.' 可能会解决这个问题?
  • 我遇到了同样的错误,IOError: [Errno 2]

标签: python file py2exe pyinstaller word-cloud


【解决方案1】:

解决方案非常粗糙,我将 setup.py 重新编辑为:

from distutils.core import setup
import py2exe,sys,os
import matplotlib
import matplotlib.backends.backend_tkagg
import wordcloud
from wordcloud import WordCloud, STOPWORDS

sys.setrecursionlimit(5000)
Mydata_files = matplotlib.get_py2exe_datafiles()
setup(
    console=['._ProbMod_.py'],
    data_files = Mydata_files,
    options={
        'py2exe': {
            'dll_excludes':['MSVCP90.DLL'],
            'skip_archive' : True,
            'packages':['wordcloud'],
            'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','sklearn.utils.weight_vector','scipy.sparse.csgraph._validation','sklearn.utils.lgamma','FileDialog',
                          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg','wordcloud']
        }
    }
)

这将使py2exe不创建library.zip,然后我将所有需要的文件手动复制粘贴到创建的dist文件夹中的wordcloud文件夹中。

现在可以了。

【讨论】:

  • 您可以在调用 setup 后将该手动复制/粘贴添加到上述脚本中:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多