带看门狗的py2app ImportError

时间:2013-07-12 23:21:46

标签: python python-2.7 python-import py2app watchdog

我正在尝试使用py2app捆绑一个我在Mac上用Python 2.7制作的小型Python应用程序。我的应用使用Watchdog library,它是在我的主文件顶部导入的:

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

运行我的程序时,这些import语句运行正常,程序按预期工作。但是,运行py2app后,启动捆绑的应用程序会生成以下错误:

ImportError: No module named watchdog.observers

起初我认为这与嵌套在observers内的watchdog模块有关,但为了测试,我添加了一行

import watchdog

到我的程序顶部,然后在运行应用程序时出现错误

ImportError: No module named watchdog

所以它似乎实际上找不到watchdog包,出于某种原因。

我尝试使用py2app的watchdog选项手动添加--packages包:

$ python setup.py py2app --packages watchdog

但它没有效果。

我的非捆绑Python程序从命令行运行得很好;我导入的其他下载模块没有错误;我已成功捆绑了一个简单的“Hello World!”应用程序使用py2app,所以我相信我的设置是正确的。

但我对如何让py2app找到watchdog包有点想法。任何想法或帮助将不胜感激。

编辑:这是我的setup.py的文本,由py2applet生成。我没有修改它。

from setuptools import setup

APP = ['watcher.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

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

4 个答案:

答案 0 :(得分:1)

尝试在setup.py文件中手动包含所需的包:

from setuptools import setup

APP = ['watcher.py']
DATA_FILES = []
PKGS = ['watchdog', /*whatever other packages you want to include*/]
OPTIONS = {
    'argv_emulation': True,
    'packages' : PKGS,
}

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

答案 1 :(得分:1)

我已经安装了看门狗0.5.4,这是一个非常老的版本,结果却出现了同样的错误。将其升级到0.8.3之后错误已得到修复:

pip install watchdog --upgrade

答案 2 :(得分:0)

您的问题通常表明软件包(在您的情况下是“看门狗”或其中一个依赖项)未安装,或者至少不在py2app期望找到软件包的位置。

您是否使用相同的python命令运行py2app以及从命令行运行脚本?你得到的ImportError的消息是什么(导入“watchdog”和导入“watchdog.observers”时?)

py2app的输出(太长)也应该提到它找不到一些包,以及哪些包。

答案 3 :(得分:0)

在其中一个答案中提到,py2app似乎没有搜索python解释器使用的同一组路径,因此您需要将python库复制到其中一个位置。

例如我已经安装了MacPorts版本的Python,发现当我在/Library/Python/2.7/site-packages/中安装了一个模块时,py2app没有找到它,但它会在我找到它的时候找到它将其复制到/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages。所以要通过run:

复制它
sudo cp /Library/Python/2.7/site-packages/thatmodule.so /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/

然后再次运行py2applet脚本并构建应用程序以进行检查。如果它在其他地方,您可以使用Spotlight的命令行界面搜索所有site-packages个位置:

mdfind -name site-packages
相关问题