Ubuntu18.04虚拟机安装torch==1.1.0 CPU版遇numpy依赖问题求助
解决torch==1.1.0无GPU版本安装的依赖问题及源码编译指南
一、解决pip安装时的"No matching distribution found for numpy"问题
你遇到的核心矛盾是:你的numpy装在用户本地site-packages(/home/name/.local/lib/python3.6/site-packages),但用全局的/usr/bin/python3.6 -m pip安装torch时,pip的依赖检查逻辑默认优先扫描全局site-packages路径,没找到numpy所以报错;而Python控制台能正常导入numpy,是因为Python会自动搜索用户本地的site-packages目录,两者的路径识别逻辑不一样。
先验证:用--no-dependencies安装的torch是否可用
先别急着重装,先确认现有安装是否能正常工作:
/usr/bin/python3.6 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果输出1.1.0和False,说明torch的核心功能已经正常了——毕竟你在Windows上用同版本numpy搭配torch1.1.0成功过,版本兼容性是没问题的。
彻底解决pip依赖识别问题的三种方案
- 用
--user参数安装torch
让pip优先搜索用户本地的site-packages路径,直接执行:
/usr/bin/python3.6 -m pip install --user /path/to/your/torch-1.1.0-cp36-cp36m-linux_x86_64.whl
这样pip会自动识别到你已安装的本地numpy,不会再抛出依赖错误。
- 临时添加用户site-packages到PYTHONPATH
先设置环境变量,让pip能找到本地numpy:
export PYTHONPATH="/home/name/.local/lib/python3.6/site-packages:$PYTHONPATH" /usr/bin/python3.6 -m pip install /path/to/your/torch-1.1.0-cp36-cp36m-linux_x86_64.whl
- 将numpy安装到全局site-packages
如果不介意全局安装,用sudo把numpy装到全局路径:
sudo /usr/bin/python3.6 -m pip install numpy==1.15.4
之后再运行torch的安装命令就不会有依赖问题了。
二、无GPU环境下从源码编译PyTorch 1.1.0
之前你尝试源码编译失败,是因为没正确设置无CUDA的编译参数,按照以下步骤操作即可:
1. 安装编译依赖
先确保系统有足够的编译工具和依赖包:
sudo apt-get update sudo apt-get install build-essential cmake git libssl-dev libffi-dev python3-dev # 安装torch编译所需的Python依赖 sudo /usr/bin/python3.6 -m pip install numpy==1.15.4 pyyaml setuptools cffi typing_extensions
2. 克隆并切换到PyTorch 1.1.0源码
git clone https://github.com/pytorch/pytorch.git cd pytorch # 切换到1.1.0的tag版本 git checkout tags/v1.1.0 # 初始化并更新所有子模块(这一步很重要,别漏了) git submodule update --init --recursive
3. 设置无CUDA的编译环境变量
导出以下变量告诉编译脚本不需要CUDA支持:
export NO_CUDA=1 export PYTHON=/usr/bin/python3.6 # 如果不需要分布式训练功能,可以加这个变量加快编译 export NO_DISTRIBUTED=1
4. 编译并安装
# 开始编译(这一步可能需要几十分钟,取决于你的虚拟机性能) python setup.py build # 安装编译好的torch sudo python setup.py install # 或者如果想装到用户本地,用:python setup.py install --user
5. 验证编译结果
运行以下命令确认安装成功:
/usr/bin/python3.6 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果输出1.1.0和False,说明无GPU版本的torch编译安装成功了。
内容的提问来源于stack exchange,提问作者Tacocat




