我正在尝试使用py2exe将我的.py脚本转换为可执行文件。到目前为止,我遇到了许多问题,这些问题主要通过下面的安装文件中的“选项”来解决。但是现在我有一个问题,我无法找到解决方案,并想知道其他人是否有同样的问题并修复它。
当我使用“python setup.py py2exe”执行下面的安装文件时,它给了我一个可执行文件,但是当我运行它时,它会抱怨“没有名为builtins的模块”。
我能在这个主题上找到的唯一一篇文章表明内置版是一个python3的东西,但我正在运行2.7。
感谢任何有关此建议或提示。
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)
setup(
console=['DET14.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz'],
'dll_excludes':['MSVCP90.DLL',
'libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll'],
'includes':['scipy.sparse.csgraph._validation',
'scipy.special._ufuncs_cxx']
}
},
# data_files=matplotlibdata_files
data_files=matplotlib.get_py2exe_datafiles()
)
以下是错误消息的完整列表:
答案 0 :(得分:33)
我还发现使用'pip install future' 解决了这个问题
我从这里得到了信息:https://askubuntu.com/questions/697226/importerror-no-module-named-builtins
我希望这能为其他用户澄清这一点,比如我偶然发现了你的问题
答案 1 :(得分:2)
我终于有了这个工作。事实证明我在原始设置文件中有一些错误,其中一些是彻头彻尾的愚蠢,有些只是简单地重新理解我对setup命令的参数如何工作缺乏了解。我将补充说,后一类错误只能通过一些Shelock Holmes风格的调查和普通的旧试验和错误来解决。我的意思是,我仍然没有找到任何文档来调出setup命令的参数的含义和用法。如果有人有这些信息并且可以将其传递给woudl,我将非常感激。
以此为背景,答案如下:
有两个基本问题:
aboe安装文件中的软件包列表非常不完整。我仍然不确定规则是你必须列出你的程序所依赖的每一个包,以及它可能依赖你不知道的一些包(例如,pytz,例如......)。但是当我这样做的时候,我有一些东西可以让我最终开始工作。
上面原始问题中的错误信息看起来像我的程序依赖于一个名为“patsy”的东西,这让我感到困惑,因为我不知道那是什么,但事实证明,statsmodels( whihc是我的项目的核心)依赖于patsy,所以它需要包含在“包”列表中。
以下是最终正常工作的安装文件。我希望这个修复背后的逻辑描述对于面临同样问题的其他人是有帮助的。
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)
setup(
console=['DET14.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz','easygui',\
'statsmodels','pandas','patsy'],
'dll_excludes':['MSVCP90.DLL',
'libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll'],
'includes':['scipy.sparse.csgraph._validation',
'scipy.special._ufuncs_cxx']
}
},
data_files=matplotlib.get_py2exe_datafiles()
)
答案 2 :(得分:1)
运行pip install future
为我修复了此错误。
为了与Python2.7兼容,应将future软件包添加到setup.py中的install_requires中。
请注意,nosetests
在没有matplotlib的情况下也会失败,但是我不确定添加matplotlib作为依赖项是否有意义。
答案 3 :(得分:0)
如果pip install future
对您不起作用,则可能是某个将来的模块的错误副本隐藏在某个地方。对我来说,PyCharm在安装future==0.18
的同时安装了future=0.16
。 sudo pip uninstall future
不起作用,您仍然可以导入Future,它将是0.18
。解决方案是找到并删除它。
>>> import future
>>> future.__version__
'0.18.0'
>>> future.__file__
'/home/<USERNAME>/.local/lib/python2.7/site-packages/future/__init__.pyc'
rm -rf /home/<USERNAME>/.local/lib/python2.7/site-packages/future