gpt4 book ai didi

python - 带有用户包的 py2app

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:18 24 4
gpt4 key购买 nike

我正在开发一个小型跨平台 python 项目。我想将文件扩展名与程序相关联,因此对于 OSX,脚本似乎必须成为一个应用程序。 py2app 似乎是这项工作的完美工具,但我很难找到关于它的好文档。

我的 python 脚本依赖于我编写的包 (k.tk) 并符号链接(symbolic link)到 /Library/Python/2.7/site-packages/k/tk(单个文件被符号链接(symbolic link)到文件夹中 - 该文件夹不是符号链接(symbolic link))。

这是我正在使用的 setup.py 脚本:

"""
This is a setup.py script generated by py2applet

Usage:
python setup.py py2app
"""

from setuptools import setup
import sys

APP = ['randomizer.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True, 'includes': ['k.tk']}

setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app']
)

我的设置有两个问题,我都找到了一个我不喜欢的非常丑陋的解决方法。

第一个问题 - 别名构建

第一个问题发生在使用 python setup.py py2app -A 构建时。这应该构建带有源文件链接的应用程序,以使开发更容易。但是,当我尝试运行生成的应用程序时,它显示

Import Error: No module named k.tk

解决方法是将这些行附加到 python 脚本:

import sys
sys.path.append("/Library/Python/2.7/site-packages/")

这似乎意味着当从应用程序调用它时 python 环境出现问题,但我对 py2app 的了解还不够,不知道如何修复它。

第二个问题 - 完整构建

第二个问题发生在使用 python setup.py py2app 构建时。这会触发常规构建并将所有库复制到应用程序中。当我运行这个应用程序时,我得到

OSError: [Errno 20] Not a directory: '[path snipped]/application.app/Contents/Resources/lib/python2.7/site-packages.zip/k'

这里丑陋的解决方法是打开应用程序的文件并将 site-packages.zip 提取到名为 site-packages.zip 的文件夹中。现在报错给出的路径是一个目录,应用运行正常。

有人知道怎么解决吗?我感到很困惑,我能找到的唯一文档是 this ,这似乎非常有限。

更新

我尝试将 /Library/Python/2.7/site-packages/k 目录复制到项目目录中。这修复了别名构建,但不幸的是不是完整构建。

我还尝试按照 Python 文档 (here) 中的说明正确打包和安装。这具有相同的效果。我感到很沮丧;为什么它会尝试像查看文件夹一样查看 zip 文件?

更新

我最终编写了一个构建脚本,它只是用同名目录覆盖了 zip。这解决了问题,但我对解决方案不满意。

我也开始尝试使用 py2exe 为 Windows 构建。在 Windows 中,我遇到了完全相同的问题!这次创建了 library.zip,必须将其解压缩才能运行程序。当然,这些程序不会碰巧有完全相同的错误,但我无法想象为什么它们都错误地期望 zip 文件可以像文件夹一样访问。

最佳答案

py2app 需要一个单独的 Python 安装而不是系统 Python 才能使 bundle 工作(我建议 HomeBrew)。如果 k.tk 是一个包含更多模块的包,您也可以尝试使用 packages 而不是 includes

关于python - 带有用户包的 py2app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com