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

在setup.py中指定Windows专属DLL安装路径的正确方法是什么?

你当前硬编码lib\site-packages\fugashi\作为安装目标路径是失效的核心原因,这个路径是相对路径,无法适配所有Python环境:用户级安装、虚拟环境、conda环境、自定义安装路径的Python的site-packages位置都不是固定的,路径匹配失败时DLL就会被放到错误位置,导致加载失败。

以下是两种经过验证的可靠实现方案:

方案1:使用package_data(优先推荐)

package_data是setuptools专门设计用来随Python包分发配套文件的配置项,不需要手动指定安装路径,会自动将文件放到对应包的安装目录下,适配所有环境。
操作步骤:

  • 确保你的DLL文件放在源码目录的fugashi包目录下(可放置在子目录)
  • 修改setup.py配置:
from setuptools import setup, find_packages

setup(
    # 其他原有配置,比如name、version等
    packages=find_packages(), # 或手动指定packages=["fugashi"]
    package_data={
        # 键是包名,值是需要打包的文件匹配规则
        "fugashi": ["*.dll"]
    },
    # 如果你没有用MANIFEST.in配置其他文件,把include_package_data设为False避免冲突
    include_package_data=False
)

方案2:动态计算site-packages路径适配data_files

如果你必须沿用data_files的写法,不要硬编码路径,通过sysconfig模块动态获取当前环境的site-packages路径:

import os
import sysconfig
from setuptools import setup

# 动态获取site-packages路径,purelib对应纯Python包,platlib对应带C扩展的包按需选择
site_pkg = sysconfig.get_path("purelib")
dll_target = os.path.join(site_pkg, "fugashi")

setup(
    # 其他原有配置
    data_files=[(dll_target, [你的DLL文件路径列表])]
)

额外运行时适配建议

Python 3.8及以上版本在Windows上加载DLL时默认不会搜索包目录,建议在fugashi包的__init__.py开头添加以下代码,保证运行时可以正常找到DLL:

import os
import sys
if sys.platform == "win32":
    pkg_dir = os.path.dirname(os.path.abspath(__file__))
    os.add_dll_directory(pkg_dir)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:36:03