我正在尝试使用pyinstaller做一个独立的应用程序。可执行文件的构建很好,但是当我尝试使用库pyproj中集成的功能执行某些操作时,可执行文件崩溃。
该脚本可以在Pycharm上正常运行,所以我认为问题在于pyinstaller没有链接到某种pyproj库。
我是否可以对spec文件做一些特殊的事情,或者在用pyinstaller构建的独立应用程序上进行其他指定pyproj的事情?
这是我获得的错误:
Traceback (most recent call last): File "<string>", line 6, in
<module> File "C:\pyproj\build\main\out00-PYZ.pyz\pyproj", line 343,
in __new__ File "_proj.pyx", line 85, in _proj.Proj.__cinit__
(_proj.c:1190)
RuntimeError: no system list, errno: 2
这是我的“main.py”
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyproj
print pyproj.__version__
p=pyproj.Proj(init='EPSG:4326')
提前致谢
最佳答案
问题是,将pyproj与PyInstaller一起使用时,pyproj无法找到库文件夹中的数据文件。
解决方案是创建一个 Hook 文件,该文件将指定数据文件的位置,因此您可以将它们与我们的可执行文件链接。
hook-pyproj.py
from PyInstaller.hooks.hookutils import collect_data_files
datas = collect_data_files('pyproj')
Hook 文件可以位于Pyinstaller安装的“hooks”文件夹中,也可以使用--additional-hooks-dir命令,指定将在其中放置“hook-pyproj.py”的文件夹