繁体   English   中英

构建包含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”)。

为了解决这个问题,我尝试在运行pyinstaller时在SPEC文件和命令行中指定隐藏的netCDF4_utils文件。 规格文件和命令行的变体以及相关的错误如下:

1)隐藏的路径/文件在SPEC文件中指定,并且was路径也在命令行中给出。 运行可执行文件时,这会导致错误“导入错误:没有名为netCDF4_utils的模块”

2)隐藏的路径/文件是在命令行上指定的,但未在spec文件中指定。 这导致“编译”错误“ AttributeError:'NoneType'对象没有属性'split'”

3)在命令行上指定了隐藏文件(但没有路径),并且在命令行上单独指定了路径(在spec文件中未提供隐藏文件)。 运行可执行文件时,将导致错误“导入错误:没有名为netCDF4_utils的模块”。

4)在命令行(而不是在spec文件中)指定了隐藏文件(没有路径),这导致在运行可执行文件时出现错误“导入错误:没有名为netCDF4_utils的模块”

5)在SPEC文件中指定了隐藏文件,并且在命令行中提供了该文件的路径。 这给出了一个编译错误:“ NameError:未定义名称'netCDF_util'”

我没有尝试写一个钩子文件,因为我不知道如何写它们。

如果有人对如何使pyinstaller查找依赖文件有任何详细建议,那么可以将它们包含在发行版中,将不胜感激。

这是在使用python 2.7和pyinstaller 2.1的win7机器上完成的

尝试:

  • 删除当前的pyinstallerpip uninstall pyinstaller

  • python3分支克隆并安装pyinstallerhttps://github.com/pyinstaller/pyinstaller

  • .spec文件从hiddenimports = []修改为hiddenimports = ['netCDF4.utils', 'netcdftime']

这对我有用。

  • 文件中似乎存在语法错误: hook-netCDF4.py
  • 该文件通常位于python文件夹中(根据您的pyinstaller版本):

    C:\\ Python27 \\ LIB \\站点包\\ PyInstaller-3.4.dev0 + 3c87c135a-py2.7.egg \\ PyInstaller \\挂钩

  • 你必须打开一个文本编辑器文件,修改“ netCDF4.utils在”“ netCDF4_utils

文件内的正确行应为:

hiddenimports = ['netCDF4_utils', 'netcdftime']

这个解决方案对我来说解决了同样的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM