py2app ImportError with watchdog

蹲街弑〆低调 提交于 2020-04-30 09:17:12

问题


I am attempting to use py2app to bundle a small Python app that I've made in Python 2.7 on Mac. My app uses the Watchdog library, which is imported at the top of my main file:

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

When running my program, these import statements work just fine, and the program works as expected. However, after running py2app, launching the bundled application generates the following error:

ImportError: No module named watchdog.observers

At first I thought it was something to do with the observers module being nested inside watchdog, but to test that, I added the line

import watchdog

to the top of my program, and then upon running the app, got the error

ImportError: No module named watchdog

so it seems that it actually can't find the watchdog package, for some reason.

I tried manually adding the watchdog package using py2app's --packages option:

$ python setup.py py2app --packages watchdog

but it had no effect.

My unbundled Python program runs just fine from the command line; other downloaded modules I've imported are giving no errors; and I have successfully bundled a simple "Hello World!" app using py2app, so I believe my setup is correct.

But I'm kind of out of ideas for how to get py2app to find the watchdog package. Any ideas or help would be greatly appreciated.

Edit: Here is the text of my setup.py, as generated by py2applet. I haven't modified it.

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

回答1:


Try manually including the desired packages in the setup.py file:

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:


I had installed watchdog 0.5.4, a very old version as it turns out, and got the same error. The error was fixed after upgrading it to 0.8.3:

pip install watchdog --upgrade



回答3:


Your problem generally indicates that the package (in your case "watchdog", or one of its dependencies) isn't installed, or at least not in a location that py2app expects to find packages.

Do you use the same python command for running py2app as for running the script from the command-line? What is the message of the ImportError you're getting (both when importing "watchdog" and importing "watchdog.observers"?

The (way too long) output of py2app should also mention that it cannot find some packages, and which ones.




回答4:


As alluded to in one of the answers py2app does not seem to search the same set of paths that are used by the python interpreter, so you need to copy the python library to one of those locations.

For example I've got the MacPorts version of Python installed and found that when I had a module installed in /Library/Python/2.7/site-packages/ py2app wasn't finding it, but it would find it when I copied it into /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages. So to copy it over 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/

Then run the py2applet script again and build the app to check. If it's elsewhere you can do a search for all site-packages locations using Spotlight's command line interface:

mdfind -name site-packages


来源:https://stackoverflow.com/questions/17625420/py2app-importerror-with-watchdog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!