2013-07-12 78 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