如何配置Python包使其安装后将文件复制到scripts目录的子文件夹中
解决方案
原生的scripts配置项不支持直接自定义子目录结构,所有通过该参数指定的脚本都会被平级放到环境的scripts根目录下。要实现子目录存放需求,可以采用以下两种方案:
方案1:使用data_files参数指定目标路径(适配setup.py配置)
你可以通过sysconfig模块获取当前Python环境的scripts目录路径,再用data_files参数按你需要的目录结构配置文件映射:
import sysconfig from setuptools import setup # 获取当前环境的scripts目录绝对路径 env_scripts_dir = sysconfig.get_path("scripts") setup( # 其他配置项省略 data_files=[ # 第一项为目标路径,第二项为对应要复制的源文件列表 (f"{env_scripts_dir}/odd_scripts", ["bin/script1.bat"]), (f"{env_scripts_dir}/even_scripts", ["bin/script2.bat"]), ] )
安装完成后,脚本就会按照你指定的结构存放到scripts的对应子目录下。
方案2:自定义构建钩子(适配pyproject.toml配置)
如果你已经迁移到了pyproject.toml作为配置文件,可以添加自定义构建后执行的钩子脚本,在包安装完成后自动创建对应的子目录,再将脚本复制到目标位置。
注意事项
- 如果你希望子目录中的脚本可以直接在命令行调用,需要手动将对应的子目录路径添加到系统的
PATH环境变量中,否则只能通过全路径访问脚本。 - 上述
data_files方案在可编辑安装(pip install -e)场景下不会生效,如果你需要支持可编辑安装,可以自定义setuptools的install命令子类,额外增加文件复制逻辑。
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

