由于环境错误,无法安装软件包:[Errno 28] 设备上没有剩余空间。

51

我正在尝试安装

python -m spacy download en_vectors_web_lg

但是它出现了错误:

Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

我可以知道为什么会出现这个错误吗?是说我在目录中没有足够的空间来安装吗?


2
这个软件包的大小为631MB,因此实际上可能没有足够的空间。 - Volodymyr Vyshnevskyi
8个回答

53

很可能它正在尝试将数据下载到你的 /tmp 临时位置。我猜测默认设置(通常为内存的一半)太小了,无法处理下载。

你可以通过以下命令禁用 tmp 挂载:systemctl mask tmp.mount。在执行此操作之前,请进行仔细研究并保持谨慎。

另外,你可以通过以下方式将你的 TMPDIR 目录设置为 /var/tmpexport TMPDIR='/var/tmp'


5
export TMPDIR='/var/tmp' 对我也有效!增加 /tmp 的大小无效。 - scjorge
或者 'sudo mount -o bind /mnt/yourbighd/tmp /tmp'。 - SYK
3
Windows 操作系统怎么样? - Shreyesh Desai
1
export TMPDIR='/var/tmp' 对我也起作用了! - Vishal Kamlapure
谢谢回答!导出命令对我有用。实际上,即使我创建了一个目录并将临时目录设置为新创建的目录,它也起作用了。 - simpleParadox

29

我必须执行系统清理来释放更多空间。

docker system prune

请注意,此操作将“删除所有未使用的容器、网络、镜像(包括悬空和无引用的镜像)以及可选卷。” 因此,请确保您不会删除需要的任何内容。


你可能想要执行docker system prune -a。 - Gilbert
哈哈!“总回收空间:21.32GB”这个解决了我的问题。+1 :) - Chris Adams
是的,这对我也起作用。 我运行了sudo docker system prune -a 回收的总空间:3.585GB 对于在本机上运行docker的人来说,我认为这是在尝试其他选项之前应该尝试的第一件事情,因为如果不加以控制,docker可能会占用大量空间。 别忘记添加-a标志,这样所有未使用的镜像都将被删除,而不仅仅是悬空的镜像。 附注:此命令不影响您的卷。但为了更加小心,您可以在运行之前备份您的数据库。 - i-wizard

24

正如这里所提到的,您可以创建一个有足够空间的目录,比如说/folder/address/here/,然后运行下面的命令来安装它:

TMPDIR=/folder/address/here/ pip install --cache-dir=$TMPDIR --build $TMPDIR package-name

由于我的情况是升级tensorflow,我运行了以下命令:

TMPDIR=/folder/address/here/ pip install --upgrade --cache-dir=$TMPDIR --build $TMPDIR tensorflow

2
感谢添加这个额外的配置开关。这使得您的答案更加完整。 - jlandercy
对我来说有效,但我必须将路径“/文件夹/地址/在这里/”放入“...”中。 - LC117

5
如果您正在处理Docker容器,建议找出为什么Docker已经占满,并清理掉占用空间的内容。
运行以下命令查看占用空间的内容:
docker system df
然后运行以下命令来清理空间占用:
docker prune --all

1
如果您正在使用Ubuntu,您也可以尝试:
sudo apt-get clean

这将清除您的软件包缓存。之后尝试安装该软件包(对我有效)。


0

对于那些在命令行和使用Windows或MacOS时感到紧张的人,启动 Docker Desktop。查看 Images。这将显示所有图像的列表,包括它们的状态。状态 Unused (dangling) 可能是您想要摆脱的全部内容。只需选择并删除即可。

为什么我会推荐GUI方法?因为 docker prune "删除所有未使用的容器、网络、镜像(包括悬空和未引用的镜像),以及可选的卷。" 这不一定是你想要的,特别是当你刚开始使用Docker时。例如,Unused 意味着 当前未使用,而不是像你在开始使用Docker时所期望的那样 不再有用 或者 不会再被使用


0

以上方法在我的Linux Ubuntu电脑上没有起作用。

最终有效的解决方案是:

  1. 重新启动电脑

  2. 将/tmp重命名为old.tmp并创建一个新的/tmp文件夹。这个想法来自于这篇文章,命令如下:

    mv /tmp /old.tmp mkdir /tmp chmod 1777 /tmp

我想问题可能是/tmp文件夹中有太多文件了。

请注意,当重新启动/tmp文件夹中有太多文件的计算机时,计算机可能会卡住。要解决此问题,这篇文章很有用。简而言之,编辑重新启动选项并将“ro ...”更改为“rw init=/bin/bash”,这样您将在重新启动时快速看到一个bash终端。


0
正如Albert Lee所说,可能是因为您的/tmp目录大小不够(应该是DRAM大小的一半)。除了他提出的解决方案,您还可以通过重新挂载来扩大/tmp目录的大小:
sudo mount -o remount,size=16G /tmp/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接