cxFreeze 和 Jaraco:导入错误

cxFreeze and Jaraco: ImportError

我正在尝试使用 irclib 库创建一个 IRC 客户端。但是,当我尝试使用 cxFreeze 冻结脚本时,我总是 运行 进入该错误:

Traceback (most recent call last):
  File "C:\python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  File "client.py", line 38, in <module>
ImportError: No module named jaraco

setup.py 脚本已修改多次,尝试包含文件、包等。似乎没有任何效果。这是当前版本供参考:

from cx_Freeze import setup, Executable

client = Executable(
    script="client.py",
    base="Win32GUI",
)

setup(
    name = "client",
    version = "0.2",
    description = "client",
    options = {'build_exe': {'includes': ["jaraco"], "packages": ["jaraco"]}},
    executables = [client],
)

客户端的脚本可以单行缩短:

from irc import client

就是这样。我没有使用 Jaraco,irclib(包 irc)是。 Jaraco 必须作为 irclib 的依赖项安装。

我试图找到它可能发生的原因,但到目前为止,什么也没找到。

感谢您的帮助!

好吧,经过一番深入研究,zope 在使用 twisted 冻结应用程序时似乎也存在同样的问题。虽然我没有用 jaraco 测试过它,但我想它是同一个问题。我希望这个解决方案适用于遇到同样问题的用户:

  1. 在您的 'site-packages' 目录中,在 'jaraco' 包中,添加 'init.py' 文件。它可以是空的。为什么没有提供,我不知道。对于 cxFreeze,没有 'init.py" 的包不是包。
  2. 重新运行 'setup.py'脚本。不要将 'jaraco' 作为包包含,提供需要它的包(这里是 'irc')。

这是 setup.py 脚本:

from cx_Freeze import setup, Executable

client = Executable(
    script="client.py",
    base="Win32GUI",
)

setup(
    name = "client",
    version = "0.2",
    description = "client",
    options = {'build_exe': {'packages': ["irc"]}},
    executables = [client],
)

我提供这个答案是因为它适用于 twisted 和 zope。看到我的客户现在使用 twisted 进行 IRC 通信,我不知道下面提供的步骤是否有效,但这就是帮助我进行 twisted 的原因。

HTH,