当 pandas 是导入时,Cx_freeze TypeError 只能连接列表(不是“NoneType”)以使用 numpy 依赖项列出
Posted
技术标签:
【中文标题】当 pandas 是导入时,Cx_freeze TypeError 只能连接列表(不是“NoneType”)以使用 numpy 依赖项列出【英文标题】:Cx_freeze TypeError can only concatenate list (not "NoneType") to list using numpy dependency when pandas is an import 【发布时间】:2016-08-17 22:19:23 【问题描述】:我正在尝试使用 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 和所有模块以避免这个问题。它曾多次在以前的安装中工作,但随后出现相同的错误。
我的问题是如何让这个脚本正确运行,否则,我可以使用哪些模块来实现相同的目标?
【问题讨论】:
【参考方案1】:我遇到了这个问题。您可以明确排除所有有问题的模块,但通过调试我想我找到了负责的代码和一个小错误修复:)。以下内容应该可以帮助您克服这个问题(并且可能会引导您找到下一个缺少的依赖项;))
检查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
【讨论】:
此修复存在问题:不再复制具有“父级为无”的模块。您应该为此添加一个“else”分支。 我认为这段代码是在说“找到父级并复制父级”(注意查找和添加父级,而不是模块)如果父级为无,那么将没有父级添加(或者会有,但我不知道足够深的代码来解决这个问题......)......但是已经 2 年了,我可能不记得什么......以上是关于当 pandas 是导入时,Cx_freeze TypeError 只能连接列表(不是“NoneType”)以使用 numpy 依赖项列出的主要内容,如果未能解决你的问题,请参考以下文章