【问题标题】:ImportError: No module named PIL using py2appImportError:没有使用 py2app 的名为 PIL 的模块
【发布时间】:2020-04-26 23:12:41
【问题描述】:

我正在尝试从 python 文件创建一个 mac 应用程序。我遇到了“ImportError:没有名为 PIL 的模块”错误。请注意,已安装 PIL,并且此脚本在从命令行运行时可以正确运行。我正试图把它变成一个 osx 应用程序。当我运行从 py2app 创建的 osx 应用程序时,出现以下错误。

我试过了:

'includes': ['PIL']

'packages': ['PIL']

'modules': ['PIL']

如何正确包含 PIL?

setup.py

from setuptools import setup

APP = ['Sandwich.py']
APP_NAME = "asdfasdf"
DATA_FILES = []
OPTIONS = {
    'argv_emulation': True,
    'iconfile': 'app.png',
    'includes': ['PIL']
    } 

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

Sandwich.py​​

import sys
import time
from PIL import ImageGrab

while(1):
    print "Chekcing in"
    time.sleep(1)

错误

9/22/16 3:13:23.736 PM PAssist[28192]: Traceback (most recent call last):
9/22/16 3:13:23.736 PM PAssist[28192]:   File "/Users/joeyz/Projects/SandwichApp/dist/PAssist.app/Contents/Resources/__boot__.py", line 351, in <module>
9/22/16 3:13:23.736 PM PAssist[28192]:     _run()
9/22/16 3:13:23.736 PM PAssist[28192]:   File "/Users/joeyz/Projects/SandwichApp/dist/PAssist.app/Contents/Resources/__boot__.py", line 336, in _run
9/22/16 3:13:23.736 PM PAssist[28192]:     exec(compile(source, path, 'exec'), globals(), globals())
9/22/16 3:13:23.736 PM PAssist[28192]:   File "/Users/joeyz/Projects/SandwichApp/dist/PAssist.app/Contents/Resources/Sandwich.py", line 3, in <module>
9/22/16 3:13:23.736 PM PAssist[28192]:     from PIL import ImageGrab
9/22/16 3:13:23.736 PM PAssist[28192]: ImportError: No module named PIL
9/22/16 3:13:23.796 PM PAssist[28192]: PAssist Error
9/22/16 3:13:23.796 PM PAssist[28192]: 2016-09-22 15:13:23.796 PAssist[28192:10044666] PAssist Error

【问题讨论】:

  • PYTHONPATH 设置是否正确?也可以试试--use-pythonpath 选项。
  • 使用 --use-pythonpath 遇到同样的问题,试图弄清楚如何设置 PYTHONPATH...
  • 您可以尝试使用from . import PIL 导入吗?
  • 在哪里?设置文件?
  • 在 Sandwich.py​​ 文件中。

标签: python py2app


【解决方案1】:

您可以在安装程序中使用 install_requires 关键字。这具有安装软件包的额外好处。在您的情况下,我会使用 install_requires=['pillow'] 并且 pip 会在安装过程中自动抓取枕头。这仍然像您一样在上面指定的包中包含 PIL。从问题中得到答案:[39649714]

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

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多