0

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

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

运行我的程序时,这些导入语句工作得很好,程序按预期工作。但是,在运行 py2app 后,启动捆绑的应用程序会产生以下错误:

ImportError: No module named watchdog.observers

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

import watchdog

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

ImportError: No module named watchdog

watchdog因此,由于某种原因,它似乎实际上找不到包。

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

$ python setup.py py2app --packages watchdog

但它没有效果。

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

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

编辑:这是 my 的文本,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

4 回答 4

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'],
)
于 2013-07-13T00:04:23.807 回答
1

我安装了看门狗 0.5.4,事实证明这是一个非常旧的版本,并且得到了同样的错误。将其升级到 0.8.3 后,该错误已修复:

pip install watchdog --upgrade
于 2016-05-03T13:50:21.423 回答
0

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

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

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 脚本并构建应用程序进行检查。site-packages如果它在其他地方,您可以使用 Spotlight 的命令行界面搜索所有位置:

mdfind -name site-packages
于 2014-09-09T07:56:43.077 回答
0

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

您是否使用与从命令行运行脚本相同的 python 命令来运行 py2app?您收到的 ImportError 消息是什么(在导入“watchdog”和导入“watchdog.observers”时?

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

于 2013-07-15T05:47:10.810 回答