Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有用户包的py2app_Python_Python 2.7_Py2exe_Py2app - Fatal编程技术网

Python 带有用户包的py2app

Python 带有用户包的py2app,python,python-2.7,py2exe,py2app,Python,Python 2.7,Py2exe,Py2app,我正在从事一个小型的跨平台python项目。我想将文件扩展名与程序关联起来,因此对于OSX来说,脚本似乎必须成为一个应用程序。py2app似乎是完成这项工作的完美工具,但我很难找到关于它的好文档 我的python脚本依赖于我编写的包(k.tk),并符号链接到/Library/python/2.7/site packages/k/tk(单个文件符号链接到文件夹中-该文件夹不是符号链接) 这是我正在使用的setup.py脚本: """ This is a setup.py script genera

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

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

这是我正在使用的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
构建时。这是为了构建带有源文件链接的应用程序,以使开发更容易。但是,当我尝试运行生成的应用程序时,它会说

导入错误:没有名为k.tk的模块

解决方法是将以下行附加到python脚本:

import sys
sys.path.append("/Library/Python/2.7/site-packages/")
这似乎意味着当从应用程序调用python时,python环境出现了一些问题,但我对py2app了解不够,不知道如何修复它

第二个问题-完整构建

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

OSError:[Errno 20]不是目录:'[path snipped]/application.app/Contents/Resources/lib/python2.7/site packages.zip/k'

这里难看的解决方法是打开应用程序的文件并将site-packages.zip解压缩到名为site-packages.zip的文件夹中。现在,错误消息中给出的路径是一个目录,应用程序运行正常

有人知道如何解决这个问题吗?我感到很困惑,我能找到的唯一文档是,它似乎非常有限

更新

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

我还尝试按照Python文档()中的说明进行正确的打包和安装。这也产生了同样的效果。我感到很沮丧;为什么它会试图在zip文件中查看,好像它是一个文件夹

更新

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


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

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

如果由于某种原因上述解决方案不起作用,请尝试添加第三方包通过
open(*,'r')


将他们想要打开的内容添加到数据文件中=[..]

您是否尝试过
包含“:['k”,“k.tk']
?我在这行中包含了
k.tk
OPTIONS={'argv\u仿真]:True,'includes':['k.tk']}
。我尝试将其更改为
OPTIONS={'argv_仿真:True',includes':['k',k.tk']}
,但问题仍然存在。系统Python中是否存在
k
?您需要安装另一个Python包才能正常工作,例如,
HomeBrew
。我相信我使用的是系统Python。py2app不能使用系统Python?我相信它不会独立构建任何系统库,但别名模式我不确定。这就解决了它。我使用安装了自制python,并将
OPTIONS={'argv_仿真:True',includes':['k.tk']}
更改为
OPTIONS={'argv_仿真:True',packages':['k',k.tk']}