簡體   English   中英

py2exe找不到所有依賴項

[英]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.

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