首页 > 解决方案 > python 3:py2app“未找到模块(无条件导入)”

问题描述

我正在为一个对代码一无所知的朋友构建一个独立的 python3 应用程序。对于这个应用程序,我使用了多个模块,包括tkinteropenpyxl. 我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 VM上测试它,所以那里没有问题。

我注意到这个问题并不是新问题,并且发现了多个线程处理它,包括:
-将 py2app 与 tkinter 和 openpyxl 以及多个文件一起使用?:但是 .egg 文件只出现在python 2.Xnot inpython 3所以我不知道如何解释它
-将常量移动到配置文件会破坏 py2exe 和 py2app:这正是我的问题,所以我遵循了08/ 中为此制作的补丁2017
不幸的是,新的 openpyxl__init__.py文件不再包含任何指向 .json 文件的链接。

所以现在我很茫然。有任何想法吗 ?

*编辑:使用完全相同的代码,但使用xlwings模块而不是openpyxl模块可以完美地工作。但前者打开文件以在其中工作。这很慢,(imo)不太适合使用。

标签: pythonpython-3.xopenpyxlpy2exepy2app

解决方案


推荐阅读