2013-07-12 77 views
0

我正在尝试使用py2app捆绑我在Mac上制作的Python 2.7中的一个小型Python应用程序。我的应用程序使用Watchdog library,这是在我的主文件的顶级进口:py2app导入错误与看门狗

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

当运行我的程序,这些import语句工作得很好,且运行正常。但是,运行py2app,启动捆绑的应用程序后会生成以下错误:

ImportError: No module named watchdog.observers 

起初我还以为是什么做用被嵌套在watchdogobservers模块,但是测试,我添加了一行

import watchdog 

我的程序的顶部,然后在运行的应用程序,得到了错误

ImportError: No module named watchdog 

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

我尝试手动添加watchdog包使用py2app的--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'], 
) 
+0

您的setup.py的外观如何? – Jumhyn

+0

我的setup.py只是py2applet生成的默认文件 - 我根本没有修改它。我已将文字添加到我的问题中。 – ekl

回答

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'], 
) 
0

你的问题通常表示包(在你的情况下,“看门狗”,或它的一个依赖)ISN” t安装,或者至少不在py2app期望找到软件包的位置。

您是否使用相同的python命令来运行py2app作为从命令行运行脚本?你得到的ImportError信息是什么(在导入“看门狗”和导入“watchdog.observers”时都是这样的?)

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

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中时找到它。所以要复制它的运行:

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 
1

我已经安装了监视0.5.4,一个很老的版本,因为它证明,并得到了同样的错误。升级到0.8.3后错误得到修复:

pip install watchdog --upgrade