构建包含 netcdf4 的 python 发行版时出现问题
problems building python distribion containing netcdf4
我正在尝试使用 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"
使用的规范文件是:
# -*- 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")。
为了尝试解决这个问题,我尝试在 运行ning pyinstaller 时在 SPEC 文件和命令行中指定隐藏的 netCDF4_utils 文件。 spec文件和命令行的变化以及相关的错误如下:
1) SPEC文件中指定了隐藏的path/file,命令行中也给出了路径。当可执行文件为 运行
时,这会导致错误 "Import error: No module named netCDF4_utils"
2) 隐藏的 path/file 是在命令行上指定的,而不是在规范文件中。这导致 'compilation' 错误 "AttributeError: 'NoneType' object has not attribute 'split'"
3)命令行指定了隐藏文件(但没有路径),命令行单独给出了路径(spec文件中没有给出隐藏文件)。当可执行文件为 运行 时,这会导致错误 "Import error: No module named netCDF4_utils"
.
4) 隐藏文件(无路径)是在命令行(而不是在 spec 文件中)指定的,当可执行文件为 运行
时会导致错误 "Import error: No module named netCDF4_utils"
5) SPEC 文件中指定了隐藏文件,并在命令行中给出了该文件的路径。这给出了编译错误:"NameError: name 'netCDF_util' is not defined"
我没有尝试编写挂钩文件,因为我不知道如何编写它们。
如果有人对如何让 pyinstaller 找到依赖文件以便将它们包含在分发中有任何详细建议,我们将不胜感激。
这是在使用 python 2.7 和 pyinstaller 2.1
的 win7 机器上完成的
尝试:
删除当前pyinstaller
:pip uninstall pyinstaller
从 python3
分支 (https://github.com/pyinstaller/pyinstaller) 克隆并安装 pyinstaller
将您的 .spec
文件从 hiddenimports = []
修改为 hiddenimports = ['netCDF4.utils', 'netcdftime']
这对我有用。
- 文件内部似乎有语法错误:
hook-netCDF4.py
此文件通常位于 python 文件夹内(根据您的 pyinstaller 版本):
C:\Python27\Lib\site-packages\PyInstaller-3.4.dev0+3c87c135a-py2.7.egg\PyInstaller\hooks
您必须使用文本编辑器打开文件,然后将“netCDF4_utils
”中的“netCDF4.utils
”更改为“netCDF4_utils
”
文件中正确的行应该是:
hiddenimports = ['netCDF4_utils', 'netcdftime']
这个解决方案对我解决了同样的问题很有效。
我正在尝试使用 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"
使用的规范文件是:
# -*- 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")。
为了尝试解决这个问题,我尝试在 运行ning pyinstaller 时在 SPEC 文件和命令行中指定隐藏的 netCDF4_utils 文件。 spec文件和命令行的变化以及相关的错误如下:
1) SPEC文件中指定了隐藏的path/file,命令行中也给出了路径。当可执行文件为 运行
时,这会导致错误 "Import error: No module named netCDF4_utils"2) 隐藏的 path/file 是在命令行上指定的,而不是在规范文件中。这导致 'compilation' 错误 "AttributeError: 'NoneType' object has not attribute 'split'"
3)命令行指定了隐藏文件(但没有路径),命令行单独给出了路径(spec文件中没有给出隐藏文件)。当可执行文件为 运行 时,这会导致错误 "Import error: No module named netCDF4_utils" .
4) 隐藏文件(无路径)是在命令行(而不是在 spec 文件中)指定的,当可执行文件为 运行
时会导致错误 "Import error: No module named netCDF4_utils"5) SPEC 文件中指定了隐藏文件,并在命令行中给出了该文件的路径。这给出了编译错误:"NameError: name 'netCDF_util' is not defined"
我没有尝试编写挂钩文件,因为我不知道如何编写它们。
如果有人对如何让 pyinstaller 找到依赖文件以便将它们包含在分发中有任何详细建议,我们将不胜感激。
这是在使用 python 2.7 和 pyinstaller 2.1
的 win7 机器上完成的尝试:
删除当前
pyinstaller
:pip uninstall pyinstaller
从
python3
分支 (https://github.com/pyinstaller/pyinstaller) 克隆并安装pyinstaller
将您的
.spec
文件从hiddenimports = []
修改为hiddenimports = ['netCDF4.utils', 'netcdftime']
这对我有用。
- 文件内部似乎有语法错误:
hook-netCDF4.py
此文件通常位于 python 文件夹内(根据您的 pyinstaller 版本):
C:\Python27\Lib\site-packages\PyInstaller-3.4.dev0+3c87c135a-py2.7.egg\PyInstaller\hooks
您必须使用文本编辑器打开文件,然后将“
netCDF4_utils
”中的“netCDF4.utils
”更改为“netCDF4_utils
”
文件中正确的行应该是:
hiddenimports = ['netCDF4_utils', 'netcdftime']
这个解决方案对我解决了同样的问题很有效。