目前我想出的解决办法是强制喂食
hidden-imports
变量中包含的所有模块
C:\ProgramData\Anaconda2\envs\wps_env36\Lib\sitepackages\rasterio
使用
glob
# -*- mode: python -*-
block_cipher = None
import glob, os
rasterio_imports_paths = glob.glob(r'C:\ProgramData\Anaconda2\envs\wps_env36\Lib\site-packages\rasterio\*.py')
rasterio_imports = ['rasterio._shim']
for item in rasterio_imports_paths:
current_module_filename = os.path.split(item)[-1]
current_module_filename = 'rasterio.'+current_module_filename.replace('.py', '')
rasterio_imports.append(current_module_filename)
a = Analysis(['workflow_3.py'],
pathex=['D:\\11202750-002_RA2CE\\Basis'],
binaries=[],
datas=[],
hiddenimports=rasterio_imports,
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='workflow_3',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='workflow_3')
不幸的是,这并不能解释为什么
pyinstaller
一开始就看不到那些模块。不过,它确实可以暂时解决这个问题,而且代码编译得很好。