【发布时间】:2017-10-01 01:28:07
【问题描述】:
我正在尝试使用 pyinstaller 创建一个 python 发行版,但没有成功。使用的命令行是:
pyinstaller ^
--paths="C:\Python27\Lib\site-packages" ^
--hidden-import="C:\Python27\Lib\site-packages\netCDF4_utils.py" ^
"C:\Users\...\Code\python\NCTSutil\NCTSU.spec"
使用的spec文件是:
# -*- mode: python -*-
a = Analysis(['C:\\Users\\...\\Code\\python\\NCTSutil\\NCTSU.py'],
pathex=['C:\\Users\\...\\Code\\python\\NCTSutil'],
hiddenimports=[],
hookspath=['C:\\Users\\...\\Code\\python\\NCTSutil\\hooks'],
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='NCTSU.exe',
debug=False,
strip=None,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=None,
upx=True,
name='NCTSU')
最初,我只使用为 pubsub 模块指定的钩子路径(我从网站上下载)构建了可安装的。当我尝试运行可执行文件时,我收到了错误
"Import error: No module named netCDF4_utils" when executable is run
我认为这是由于安装程序无法找到某些 NetCDF4 依赖项造成的。 (原包导入为“import netcdf4”)。
为了尝试解决这个问题,我尝试在运行 pyinstaller 时在 SPEC 文件和命令行中指定隐藏的 netCDF4_utils 文件。 spec 文件和命令行的变化以及相关的错误如下:
1) 隐藏路径/文件在 SPEC 文件中指定,并且路径也在命令行中给出。这导致运行可执行文件时出现错误“导入错误:没有名为 netCDF4_utils 的模块”
2) 隐藏路径/文件是在命令行中指定的,但不是在规范文件中。这导致'编译'错误“AttributeError:'NoneType'对象没有属性'split'”
3) 在命令行中指定了隐藏文件(但没有路径),并且在命令行中单独给出了路径(在spec文件中没有给出隐藏文件)。这会导致运行可执行文件时出现错误“导入错误:没有名为 netCDF4_utils 的模块” .
4) 隐藏文件(无路径)是在命令行中指定的(而不是在规范文件中),这会导致运行可执行文件时出现错误“导入错误:没有名为 netCDF4_utils 的模块”
5) 隐藏文件在 SPEC 文件中指定,文件路径在命令行中给出。这给出了一个编译错误:“NameError: name 'netCDF_util' is not defined”
我没有尝试编写挂钩文件,因为我不知道如何编写它们。
如果有人对如何使 pyinstaller 查找依赖文件有任何详细建议,以便将它们包含在分发中,将不胜感激。
这是在使用 python 2.7 和 pyinstaller 2.1 的 win7 机器上完成的
【问题讨论】:
标签: python pyinstaller netcdf