我正在尝试使用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”的文件夹

09-25 17:10