【问题标题】:py2app ImportError with watchdogpy2app ImportError 与看门狗
【发布时间】:2013-07-12 23:21:46
【问题描述】:

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

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

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

ImportError: No module named watchdog.observers

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

import watchdog

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

ImportError: No module named watchdog

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

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

$ python setup.py py2app --packages watchdog

但它没有效果。

我未捆绑的 Python 程序可以在命令行中正常运行;我导入的其他下载模块没有出错;我已经成功捆绑了一个简单的“Hello World!” app 使用 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'],
)

【问题讨论】:

  • 你的 setup.py 是什么样子的?
  • 我的 setup.py 只是 py2applet 生成的默认文件——我根本没有修改它。我已将文本添加到我的问题中。

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


【解决方案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'],
)

【讨论】:

    【解决方案2】:

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

    pip install watchdog --upgrade
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        正如在一个答案中提到的那样,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。所以复制它运行:

        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
        

        【讨论】:

          猜你喜欢
          • 2021-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-21
          • 2012-04-09
          • 2011-12-04
          • 1970-01-01
          相关资源
          最近更新 更多