如何从Python文件构建自定义conda包并解决bld.bat路径报错问题
问题根因
你遇到的xcopy报错并非环境变量未加载,核心是两个问题:
- xcopy不会自动创建不存在的多级目标目录,你要复制到的
%PREFIX%\Lib\site-packages\package-name\目录默认不存在,直接复制就会触发路径无效报错 - 你当前是在系统的
C:\Windows\system32目录下执行conda-build命令,该目录权限受限,也可能导致文件操作失败
现有配置修复方案
先把执行目录切换到package-name所在的普通用户目录(比如C:\Users\你的用户名\路径下),再修改bld.bat内容如下即可解决报错:
:: 先创建目标目录 if not exist "%PREFIX%\Lib\site-packages\package-name\" mkdir "%PREFIX%\Lib\site-packages\package-name\" :: 加/y参数跳过覆盖确认,/e复制所有子目录包括空目录 xcopy ".\lib\*" "%PREFIX%\Lib\site-packages\package-name\" /e /y if errorlevel 1 exit 1
更简单的跨平台构建方案
不需要单独维护bld.bat和build.sh,直接用Python标准打包配置配合conda-build自动完成安装,步骤如下:
- 在package-name根目录新增setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="package-name", version="1.0", package_dir={"": "lib"}, packages=find_packages(where="lib"), )
- 修改meta.yaml,新增build段,删除原有的bld.bat和build.sh即可:
package: name: package-name version: 1.0 source: path: . build: script: "{{ PYTHON }} -m pip install . -vv" # 如果你的包是纯Python无平台依赖,可以加下方字段,构建出来的包所有平台通用 noarch: python requirements: host: - python >=3.6 - pip - setuptools run: - python >=3.6
这种方案不需要自己处理路径复制逻辑,conda-build会自动把你的Python文件安装到对应环境的site-packages目录下,同时兼容Windows、macOS、Linux多平台,不会出现路径报错问题。
内容的提问来源于stack exchange,提问作者Griffin
相关产品推荐
相关产品推荐

