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

如何在setup.py中配置自动复制pyproj.libs等文件夹至lib目录?

解决方案

要自动复制pyproj.libs、scipy.libs、Shapely.libs这三个文件夹到输出目录的lib路径,你可以在PyInstaller的build_exe配置中添加include_files参数,通过动态获取包的安装路径来指定需要复制的文件夹。

步骤1:添加路径获取工具代码

在setup.py开头加入以下代码,用于自动定位各个包的.libs文件夹位置:

import os
import importlib.metadata

def get_libs_folder(package_name, libs_dir_name):
    # 获取目标包的安装目录
    pkg_root = importlib.metadata.distribution(package_name).locate_file('')
    # 拼接得到.libs文件夹的完整路径
    return os.path.join(pkg_root, libs_dir_name)

步骤2:更新build_exe配置

修改你的options字典,新增include_files项,指定要复制的源路径和目标路径:

# 提前获取三个.libs文件夹的路径
scipy_libs = get_libs_folder('scipy', 'scipy.libs')
pyproj_libs = get_libs_folder('pyproj', 'pyproj.libs')
shapely_libs = get_libs_folder('Shapely', 'Shapely.libs')

options = {
    'build_exe': {
        'includes': [],
        'packages': [
             'PyQt5',
             'scipy',
             'os',
             'sys',
             'datetime',
             'pandas',
             'scipy.spatial.distance',
             'open3d',
             'geopandas',
             'laspy',
             'numpy',
             'alphashape',
             'shapely.speedups'
        ],
        'excludes': [
            'tkinter', 'matplotlib', 'sqlite3'
        ],
        # 配置自动复制的文件夹,格式为(源路径, 输出目录中的目标路径)
        'include_files': [
            (scipy_libs, 'lib/scipy.libs'),
            (pyproj_libs, 'lib/pyproj.libs'),
            (shapely_libs, 'lib/Shapely.libs')
        ]
    }
}

关键说明

  • include_files中的元组第一个元素是本地系统里的源文件夹路径,第二个元素是相对于PyInstaller输出目录的目标路径,这里指定lib/xxx.libs会和你手动复制的位置完全一致。
  • 使用importlib.metadata是Python 3.8+官方推荐的包路径获取方式,兼容性优于旧版的pkg_resources。
  • 注意包名和文件夹名的大小写匹配(比如Shapely首字母大写,对应Shapely.libs),避免路径定位错误。

内容的提问来源于stack exchange,提问作者Spatial Digger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:35:52