我正在尝试使用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'],
)
答案 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