删除 matplotlib 对 numpy 的依赖(并使用 Apple 的应用程序加载器)
Removing matplotlib's dependencies for numpy (and using Apple's application loader)
我正在尝试将应用上传到 Mac 应用商店。我使用 py2app 创建了一个应用程序包,对框架和可执行文件进行了代码签名,使用 productbuild
创建了一个 .pkg 并对其进行了签名。在我使用应用程序加载器之前,一切似乎都很好。这是我收到的错误消息:
Package Summary:
1 package(s) were not uploaded because they had problems:
/var/folders/0n/tcm_mnqx7xz7x4z87_96y88r0000gn/T/2202BA63-472B-4357-9F4C-4127EA0E2E25/1050509510.itmsp - Error Messages:
ERROR ITMS-90135: "The executable could not be re-signed for submission to the App Store. The app may have been built or signed with non-compliant or pre-release tools."
经过反复试验,我将可能出现的问题缩小到一个模块。我的应用程序使用 matplotlib 创建图形。因为我使用 matplotlib,所以我必须包含 numpy 模块(它是一个依赖项)。仅当应用程序中包含 numpy 时,我才会收到上述错误。一旦我从 appName/Contents/Resources/lib/python3.4/numpy
中删除它的文件夹,错误就消失了,应用程序开始上传。但是,由于现在删除了 numpy,我的应用程序不再有效。
我的问题
- 我可以移除 matplotlib 对 numpy 的依赖,这样我就可以完全移除 numpy 了吗?或者有没有不需要numpy的matplotlib版本?
- 有没有办法在包中保留 numpy 并仍然使用应用程序加载器?
我试图通过添加 'empty' 文件来欺骗 matplotlib 认为 numpy 仍然存在(例如:使 numpy 中的 __init__.py
成为一个空文档),但没有成功。
这是我为 matplotlib 导入的模块列表:
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib import style
我正在使用:
Python 3.4,
OSX 10.10.5,
Application Loader 3.2(也试过 3.0)
我设法解决了 Apple 应用程序加载器的问题。正如我最初问题的一些回复中提到的,numpy 与 matplotlib 的集成太深了。没有简单的方法来重写、替换或删除 numpy。要解决来自应用程序加载器的错误消息,您需要从 numpy 中删除一个特定文件。有问题的文件是 libnpymath.a
,可以在文件夹 appName/Contents/Resources/lib/python3.4/numpy/core/lib
中找到。一旦你删除它,应用程序加载器就不会再对你尖叫了(至少对于那个特定的问题)。
我的应用程序似乎在没有删除文件的情况下工作正常。
我正在尝试将应用上传到 Mac 应用商店。我使用 py2app 创建了一个应用程序包,对框架和可执行文件进行了代码签名,使用 productbuild
创建了一个 .pkg 并对其进行了签名。在我使用应用程序加载器之前,一切似乎都很好。这是我收到的错误消息:
Package Summary:
1 package(s) were not uploaded because they had problems:
/var/folders/0n/tcm_mnqx7xz7x4z87_96y88r0000gn/T/2202BA63-472B-4357-9F4C-4127EA0E2E25/1050509510.itmsp - Error Messages:
ERROR ITMS-90135: "The executable could not be re-signed for submission to the App Store. The app may have been built or signed with non-compliant or pre-release tools."
经过反复试验,我将可能出现的问题缩小到一个模块。我的应用程序使用 matplotlib 创建图形。因为我使用 matplotlib,所以我必须包含 numpy 模块(它是一个依赖项)。仅当应用程序中包含 numpy 时,我才会收到上述错误。一旦我从 appName/Contents/Resources/lib/python3.4/numpy
中删除它的文件夹,错误就消失了,应用程序开始上传。但是,由于现在删除了 numpy,我的应用程序不再有效。
我的问题
- 我可以移除 matplotlib 对 numpy 的依赖,这样我就可以完全移除 numpy 了吗?或者有没有不需要numpy的matplotlib版本?
- 有没有办法在包中保留 numpy 并仍然使用应用程序加载器?
我试图通过添加 'empty' 文件来欺骗 matplotlib 认为 numpy 仍然存在(例如:使 numpy 中的 __init__.py
成为一个空文档),但没有成功。
这是我为 matplotlib 导入的模块列表:
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib import style
我正在使用:
Python 3.4, OSX 10.10.5, Application Loader 3.2(也试过 3.0)
我设法解决了 Apple 应用程序加载器的问题。正如我最初问题的一些回复中提到的,numpy 与 matplotlib 的集成太深了。没有简单的方法来重写、替换或删除 numpy。要解决来自应用程序加载器的错误消息,您需要从 numpy 中删除一个特定文件。有问题的文件是 libnpymath.a
,可以在文件夹 appName/Contents/Resources/lib/python3.4/numpy/core/lib
中找到。一旦你删除它,应用程序加载器就不会再对你尖叫了(至少对于那个特定的问题)。
我的应用程序似乎在没有删除文件的情况下工作正常。