You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cx_Freeze打包含GeoPandas的Python程序时找不到geos_c.dll问题求助

解决方法

1. 修改测试脚本test.py,在所有导入语句最前端添加运行时路径适配代码

# test.py 开头新增适配代码
import os
import sys

# 识别打包后的运行环境
if getattr(sys, 'frozen', False):
    # 获取exe文件所在的根目录
    exe_root = os.path.dirname(sys.executable)
    # 将打包后的依赖库路径加到系统PATH最前面,优先读取本地依赖
    os.environ['PATH'] = os.path.join(exe_root, 'lib') + os.pathsep + os.environ['PATH']
    # 指定pyproj的资源文件路径,避免pyproj报错
    os.environ['PROJ_LIB'] = os.path.join(exe_root, 'share', 'proj')

# 原有导入语句放在适配代码之后
import numpy as np
import geopandas as gpd

from pyproj import _datadir, datadir

print("Test script:")
print(f"Executable {sys.executable}")
print("Read numpy list")
x = np.linspace(0, 10, 11)
print(x)

2. 修改打包配置setup.py,添加缺失的地理空间依赖库文件

import cx_Freeze
import sys
import os 

PYTHON_INSTALL_DIR = os.path.dirname(sys.executable)
# 新增:读取conda环境的Library目录,地理空间类依赖默认都存放在该路径下
CONDA_LIBRARY_DIR = os.path.join(PYTHON_INSTALL_DIR, 'Library')

os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

include_files = [
    (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join('lib', 'tk86t.dll')),
    (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join('lib', 'tcl86t.dll')),
    # 新增:自动拷贝geos_c.dll到打包后的lib目录
    (os.path.join(CONDA_LIBRARY_DIR, 'bin', 'geos_c.dll'), os.path.join('lib', 'geos_c.dll')),
    # 新增:自动拷贝proj的全部资源文件到打包后的对应目录
    (os.path.join(CONDA_LIBRARY_DIR, 'share', 'proj'), os.path.join('share', 'proj'))
]

packages = ["numpy", "tkinter", "geopandas", "shapely", "fiona", "pyproj"]

base = None
if sys.platform == "win32":
    # 测试阶段可以注释掉下面这行,保留控制台窗口方便排查报错,确认运行正常后再恢复即可
    base = "Win32GUI"

executables = [cx_Freeze.Executable("test.py", base=base)]

cx_Freeze.setup(
        name = "Network_Analyst",
        options = {"build_exe": {"packages":packages,
                                 "include_files":include_files}},
        version = "0.1",
        description = "Network analyst",
        executables = executables
        )

3. 执行打包

先激活对应的conda test_env环境,再执行打包命令:
python setup.py build
打包完成后直接运行build目录下生成的exe文件即可。

说明:之前手动拷贝dll到全局路径无效,是因为程序运行时优先读取conda环境编译时写入的硬编码路径,通过上述适配后程序会优先读取打包目录内的依赖文件,同时也支持打包后的程序拷贝到其他Windows设备运行。

内容的提问来源于stack exchange,提问作者3dSpatialUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:24:04