Cx_freeze 当 pandas 是导入时,TypeError 只能连接列表(不是 "NoneType")以使用 numpy 依赖项列出

Cx_freeze TypeError can only concatenate list (not "NoneType") to list using numpy dependency when pandas is an import

我正在尝试使用 cxfreeze 将以下脚本转换为可执行文件

import datetime
from calendar import monthrange
from tia.bbg import LocalTerminal as Lt
import pandas as pd
from pypyodbc import connect, DatabaseError

print 'Hello World!'

当运行在命令行中输入以下行时:

cxfreeze test_freeze.py --target-dir test_freeze

我得到以下回溯

Traceback (most recent call last):
    File "C:\Python27\Scripts\cxfreeze", line 5, in <module>
        main()
    File "C:\Python27\lib\site-packages\cx_Freeze\main.py", line 188, in main
        freezer.Freeze()
    File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 621, in Freeze
        self._FreezeExecutable(executable)
    File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 225, in _FreezeExecutable
        exe.copyDependentFiles, scriptModule)
    File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 602, in _WriteModules
        path = os.pathsep.join([origPath] + module.parent.path)
TypeError: can only concatenate list (not "NoneType") to list

令人惊讶的是文件仍然被创建但是当 运行 我得到这个回溯:

C:\Python27\Scripts\test_freeze>test_freeze.exe
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 "test_freeze.py", line 3, in <module>
  File "C:\Python27\lib\site-packages\tia\bbg\__init__.py", line 1, in <module>
    from tia.bbg.v3api import *
  File "C:\Python27\lib\site-packages\tia\bbg\v3api.py", line 5, in <module>
    import pandas as pd
  File "C:\Python27\lib\site-packages\pandas\__init__.py", line 18, in <module>
    raise ImportError("Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['numpy']

有趣的注意事项:

我成功地 运行 这一次(使用真正的非 "hello world" 代码)并且它编译成功,我更改了一个字符串用于数据库目的并且我得到了这个错误。

当我注释掉 tia.bbg 导入和 pandas 导入时,错误停止并且程序成功冻结。注释掉 tia 也很重要,因为它是围绕 pandas 构建的包装器,所以这是有道理的。我可以自信地说 tia 不是问题,因为只评论它会抛出相同的 pandas/numpy 相关错误

我正在使用 Windows 10 64 位,Python 2.7.12 64 位 amd,Pandas 0.18.1,其他相关的也是最新版本,因为我刚刚安装 Python 和所有模块以避免此问题。之前的安装它已经运行了多次,但后来出现了同样的错误。

我的问题是如何让这个脚本正确地 运行 否则,我可以使用哪些模块来实现相同的目标?

我遇到了这个问题。您可以明确排除所有有问题的模块,但通过调试我想我找到了负责任的代码和一个小错误修复:)。以下内容应该可以帮助您解决这个问题(并可能导致您遇到下一个缺失的依赖项;))

检查freeze.py的代码,有一个情况没有检查,所以我对freezer.py做了如下修改:

第 600 行,来自

    try:
        if module.parent is not None:
            path = os.pathsep.join([origPath] + module.parent.path)
            os.environ["PATH"] = path
        self._CopyFile(module.file, target, copyDependentFiles)
    finally:
        os.environ["PATH"] = origPath

至:

    try:
        if module.parent is not None:
            if module.parent.path is not None:
                path = os.pathsep.join([origPath] + module.parent.path)
                os.environ["PATH"] = path
                self._CopyFile(module.file, target, copyDependentFiles)
            else:
                path = os.pathsep.join([origPath, os.path.dirname(module.parent.file)])
                os.environ["PATH"] = path
                print '========================================================'
    finally:
        os.environ["PATH"] = origPath