在OSX系统中pip安装CrossMap失败:无法找到os/rand.c文件
解决OSX 10.11.6上pip安装CrossMap时的htslib编译错误
这个错误的核心原因是CrossMap依赖的htslib库在编译时找不到内部源码文件os/rand.c——这个文件是htslib自身的组成部分,通常是因为pip自动拉取的htslib源码不完整,或者系统编译环境缺失、路径冲突导致的。下面是针对OSX 10.11.6环境的具体解决步骤:
1. 确保系统编译环境完整
OSX上编译C扩展需要Xcode命令行工具,先检查是否安装:
xcode-select --install
如果已经安装,会提示"command line tools are already installed";如果没装,按提示完成安装即可。
2. 先通过brew安装完整的htslib,再安装CrossMap
brew提供的htslib是预编译好的完整版本,能避免源码编译的问题:
- 安装htslib:
brew install htslib
- 设置环境变量让pip找到已安装的htslib:
export HTSLIB_DIR=$(brew --prefix htslib)
- 再次尝试安装CrossMap:
pip install CrossMap
3. 手动克隆CrossMap源码并确保子模块完整
如果上面的方法不行,可能是pip拉取的源码包中htslib子模块缺失,手动克隆并初始化子模块:
- 克隆仓库(注意加
--recursive拉取子模块):
git clone --recursive https://github.com/liguowang/CrossMap.git
- 进入项目目录:
cd CrossMap
- 确保htslib子模块完全拉取:
git submodule update --init --recursive
- 手动执行安装:
python setup.py install
4. 使用虚拟环境隔离依赖(可选)
OSX 10.11.6的系统环境和brew的Python可能存在依赖冲突,用virtualenv创建干净的环境:
- 安装virtualenv:
pip install virtualenv
- 创建并激活虚拟环境:
virtualenv crossmap_env source crossmap_env/bin/activate
- 在虚拟环境中重复步骤2或3,尝试安装CrossMap。
内容的提问来源于stack exchange,提问作者prismofeverything
相关产品推荐
相关产品推荐

