Python Py2app 打包目录

0 投票
1 回答
894 浏览
提问于 2025-04-20 17:25

我在使用py2app打包的一组Python文件中遇到了一个错误,提示无法调用某个方法。

(1) 我查阅了很多关于py2app导入大目录或包组的信息,但似乎在与这些文件交互时出现了问题。我在我的设置中硬编码了每个要包含的文件,但它仍然提示无法从我的文件'random.py'中调用一个函数。这个'random.py'文件会生成一个脚本,通过'happy.py'运行,而这个脚本单独运行时完全没问题,所有的依赖关系(比如导入的模块等)也都是正确的。

(2) 更复杂的是,这个应用程序完全通过终端运行,所以我不确定是否需要直接给别人发送.exe文件,因为我猜测py2app会直接运行脚本,而没有用户输入的选项。

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

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['happy.py']
DATA_FILES = ['happy.pyc',
 'random.py',
 'random.pyc',
 'happy.py',
 'screener.py',
 '__init__.py',
 'screener.pyc',
 'setup.py']
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    py_modules=['random', 'screener', '__init__','happy',],
    setup_requires=['py2app'],


)



ERROR OUT(given by .exe inside of .app, since .app runs a console error 255 with 0 info) 

                                                      | | _____   _____| | / |
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: | |/ _ \ \ / / _ \ | | |
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: | |  __/\ V /  __/ | | |
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: |_|\___| \_/ \___|_| |_|
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: 
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: Traceback (most recent call last):
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:   File "/Users/random/Desktop/bla/dist/happy.app/Contents/Resources/__boot__.py", line 373, in <module>
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:     _run()
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:   File "/Users/random/Desktop/bla/dist/happy.app/Contents/Resources/__boot__.py", line 358, in _run
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:     exec(compile(source, path, 'exec'), globals(), globals())
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:   File "/Users/random/Desktop/bla/dist/happy.app/Contents/Resources/happy.py", line 275, in <module>
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:     print testone()
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:   File "/Users/random/Desktop/bla/dist/happy.app/Contents/Resources/happy.py", line 52, in testone
Sep  9 04:39:12 softroot.local happy[39888] <Notice>:     from random import function
Sep  9 04:39:12 softroot.local happy[39888] <Notice>: ImportError: cannot import name function

1 个回答

0

你问的这个 random.py 是你自己写的脚本,还是Python自带的模块呢?

你有没有试过从你生成的应用包里复制 random.py,然后用 import random 导入它,接着检查一下 random.__file__ 确保它就是你想要的那个文件?然后再试着执行出问题的那行代码 from random import function

撰写回答