我正在为一个对代码一无所知的朋友构建一个独立的 python 应用程序。对于这个应用程序,我使用多个模块,包括tkinter
and openpyxl
. I use py2app
制作我的应用程序。
尽管程序的 GUI 部分可以工作,但使用的方法openpyxl
模块没有。正如我的终端所示:
Modules not found (unconditional imports):
* StringIO.StringIO (pkg_resources._vendor.six)
* _gdbm (dbm.gnu)
* cjkwrap (texttable)
* com (com.sun.jna)
* com.jna (com.sun)
* com.sun (com.sun.jna.platform)
* copy_reg (pyexcel_io._compact)
* defusedxml (openpyxl.xml.functions)
* itertools.izip (ctypes.macholib.dyld)
* itertools.izip_longest (ctypes.macholib.dyld)
* lxml (openpyxl.conftest, openpyxl.xml.functions)
* lxml.LXML_VERSION (lxml.etree)
* lxml.etree.Element (openpyxl.conftest, openpyxl.xml)
* lxml.etree.ElementTree (openpyxl.conftest, openpyxl.xml)
* lxml.etree.LIBXML_VERSION (openpyxl.xml, openpyxl.xml.functions)
等等 ...
现在我首先想到的是我的setup.py
文件错误,所以我调查了一下。尽管我仍然对这个选择感到困惑argv_emulation
我认为这是正确的。
from setuptools import setup
APP = ['foo.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': False,
'includes': ['time', 'openpyxl', 'pyexcel', 'os', 'platform', 'tkinter']}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
python代码可以工作,我已经在Mac虚拟机上测试过,所以没有问题。
我注意到这个问题并不新鲜,并且发现多个线程正在处理它,包括:
- 将 py2app 与 tkinter 和 openpyxl 以及多个文件一起使用? https://stackoverflow.com/questions/18364295/using-py2app-with-tkinter-and-openpyxl-and-multiple-files:但 .egg 文件仅出现在python 2.X
not in python 3
所以我不知道如何解释它
- 将常量移动到配置文件会破坏 py2exe 和 py2app https://bitbucket.org/openpyxl/openpyxl/issues/498: 这正是我的问题,所以我遵循了08/2017 为此制作的补丁 https://bitbucket.org/als/openpyxl/commits/aa3b82bd8fa3d795f09c1d8141bdbe6f76e800a8
不幸的是,新的 openpyxl__init__.py
文件不再包含任何 .json 文件的链接。
所以现在我很茫然。有任何想法吗 ?
*编辑:使用完全相同的代码,但使用xlwings
模块而不是openpyxl
模块工作完美。但前者打开文件并在其中工作。这很慢并且(我认为)使用起来不太好。