繁体   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