我正在尝试使用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')
提前致谢
答案 0 :(得分:3)
问题是当pyproj与PyInstaller一起使用时,pyproj无法找到库文件夹中的数据文件。
解决方案是创建一个钩子文件,它将指定数据文件的位置,以便您可以将它们与我们的可执行文件链接。
hook-pyproj.py
from PyInstaller.hooks.hookutils import collect_data_files
datas = collect_data_files('pyproj')
钩子文件可以位于Pyinstaller安装的“hooks”文件夹中,也可以使用命令--additional-hooks-dir,指定一个文件夹,其中将定位“hook-pyproj.py”
答案 1 :(得分:1)
刚刚回答上一个答案,自2014年以来,对PyInstaller进行了一些重构,这里是上面钩子文件的正确导入行:
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('pyproj')
答案 2 :(得分:0)
from PyInstaller.hooks.hookutils import collect_data_files datas = collect_data_files('pyproj')
但我在另一个帖子中发现问题可以用这个来解决:
from mpl_toolkits.basemap import pyproj as pyproj
pyinstaller似乎在集成pyproj模块本身时遇到了问题,但是底图包含pyproj而且pyinstaller不会忽略它。
仅供更新