簡體   English   中英

帶看門狗的py2app ImportError

[英]py2app ImportError with watchdog

我試圖使用py2app捆綁一個我在Mac上用Python 2.7制作的小型Python應用程序。 我的應用程序使用Watchdog庫 ,它在我的主文件頂部導入:

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包,出於某種原因。

我嘗試使用py2app的--packages選項手動添加watchdog包:

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

嘗試在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.5.4,這是一個非常老的版本,結果卻出現了同樣的錯誤。 將其升級到0.8.3后修復了錯誤:

pip install watchdog --upgrade

您的問題通常表明軟件包(在您的情況下是“看門狗”或其依賴項之一)未安裝,或者至少不在py2app期望查找軟件包的位置。

您是否使用相同的python命令運行py2app以及從命令行運行腳本? 你得到的ImportError的消息是什么(導入“看門狗”和導入“watchdog.observers”時?

py2app的(太長)輸出也應該提到它找不到一些包,哪些包。

正如其中一個答案所提到的,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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM