[英]py2exe doesn't find all dependencies
我試圖從python代碼創建一個exe。 我可以從命令行運行代碼,如下所示:
python myScript.py
我從這里安裝了py2exe: http : //sourceforge.net/projects/py2exe/files/py2exe/0.6.9/
並且,有一個如下所示的setup.py:
from distutils.core import setup
import py2exe
setup(console=['myScript.py'])
而且,我像這樣運行setup.py:
python setup.py py2exe
我在輸出中得到以下內容:
The following modules appear to be missing
['Carbon', 'Carbon.Files', '__pypy__', '_scproxy', 'http_parser.http', 'http_parser.reader', 'jinja2._debugsupport', 'jinja2._markupsafe._speedups',
'jinja2.debugrenderer', 'markupsafe', 'pretty', 'socketpool', 'socketpool.util']
而且,果然,如果我嘗試運行exe,我會收到錯誤:
$ ./myScript.exe
Traceback (most recent call last):
File "restkit\__init__.pyc", line 9, in <module>
File "restkit\conn.pyc", line 14, in <module>
ImportError: No module named socketpool
Traceback (most recent call last):
File "myScript.py", line 12, in <module>
ImportError: cannot import name Resource
我需要做些什么才能讓py2exe找到依賴項?
謝謝
Carbon
是兩種不同Mac特定事物的名稱。
首先,在2.x中,在Mac OS X和Mac Classic版本中,標准庫中都有一個Carbon
包 ,用於調用Carbon / Toolbox API(以及OS X,CoreFoundation和朋友)。
其次,在2.x和3.x中,在Mac OS X上,使用PyObjC,圍繞Carbon.Framework
的PyObjC包裝器被命名為Carbon
。 (PyObjC不是stdlib的一部分,但它確實附帶了Apple的Python版本,以及除python.org的官方安裝程序之外的大多數第三方版本。)
這些都不會存在於Windows上。
py2exe
試圖變得聰明,只導入與您的平台相關的東西。 但是,它很容易被愚弄。 例如,像這樣:
try:
import Carbon.Files
except:
Carbon = collections.namedtuple('Carbon', 'Files')
Carbon.Files = None
if Carbon.Files:
Carbon.Files.whatever(…)
...可能會讓py2exe
認為Carbon.Files
是必需的。
現在,顯然這不是你的整個問題,但是py2exe
的模塊依賴代碼對你的項目不起作用是一個非常大的紅旗。 你可能在各種其他模塊上遇到類似的問題,所以它缺少你需要的東西,並要求你沒有的東西,這可能是造成你實際問題的原因。
正如FAQ解釋的那樣,您可以通過運行模塊查找程序代碼來調試它,看看它出了什么問題,如下所示:
python -m py2exe.mf -d path/to/my_file.py
您可以使用此信息來指導模塊查找器代碼,或重寫代碼,以免混淆py2exe
。
或者,更簡單地說,只需在setup.py
明確包含和排除模塊作為解決方法,而不必擔心為什么它們被錯誤地檢測到。
py2exe依賴於python版本。 你正在做的一切似乎都是正確的,我猜你安裝了錯誤的版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.