预期行为和实际行为。
我希望rasterio
使用pyinstaller
. 该脚本在我的 python 环境中运行良好。但是我无法使用PyInstaller
.
重现问题的步骤。
我有一个名为的脚本workflow_3.py
,其中包含以下内容:
import rasterio
就是这样。我尝试编译然后使用 pyinstaller 运行它,如下所示:
(wps_env36) D:\11202750-002_RA2CE\Basis>pyinstaller workflow_3.py
(wps_env36) D:\11202750-002_RA2CE\Basis>dist\workflow_3\workflow_3.exe
编译似乎运行完成,但是当我运行可执行文件时,出现以下错误:
(wps_env36) D:\11202750-002_RA2CE\Basis>dist\workflow_3\workflow_3.exe
Traceback (most recent call last):
File "workflow_3.py", line 1, in <module>
import rasterio
File "c:\programdata\anaconda2\envs\wps_env36\lib\site-packages\PyInstaller\loader\pyimod03_i
mporters.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\rasterio\__init__.py", line 23, in <module>
File "rasterio\_base.pyx", line 1, in init rasterio._base
ModuleNotFoundError: No module named 'rasterio._shim'
[17536] Failed to execute script workflow_3
尝试解决问题
'rasterio._shim'
我通过显式添加到hidden-imports
变量包含的列表来修改规范文件。然后我跑了pyinstaller workflow_3.spec
。这导致了其他ModuleNotFoundError
模块,例如control
.pycrs.py
和vrt.py
.
添加这些以hidden-imports
成功消除该ModuleNotFoundError
特定包的 ,但它仍会查找其他包,所有这些包都包含在C:\ProgramData\Anaconda2\envs\wps_env36\Lib\site-packages\rasterio
. 该目录中大约有 40 个模块。将此目录中的每个文件名都添加到hidden-imports
变量中似乎有些过分。事实上,我什至不知道它是否会起作用。
因此,我还尝试将整个目录添加到我的pathex
变量中,以便它可以扩展PYTHONPATH
它。然而,这会导致另一个问题:
File "c:\programdata\anaconda2\envs\wps_env36\lib\traceback.py", line 5, in <module>
File "c:\programdata\anaconda2\envs\wps_env36\lib\linecache.py", line 11, in <module>
File "c:\programdata\anaconda2\envs\wps_env36\lib\tokenize.py", line 27, in <module>
ImportError: cannot import name 'open'
pre-safe-import-module hook failed, needs fixing.
操作系统
Windows 7的
Rasterio 版本和出处
rasterio 版本是 1.0.8,来自 conda-forge python 版本是 3.6.6
我有两个版本的 pyinstaller
pyinstaller 3.4 py36h7602738_0 conda-forge
PyInstaller 3.5.dev0+b13e6b30b <pip>
第二个是开发版,因为这个问题,我必须得到它
问题
如何使用PyInstaller
冻结应用程序rasterio
?