"No space left on device" 在 Azure Web 角色上安装 Numpy 时

"No space left on device" when installing Numpy on an Azure Web Role

我想在 Microsoft Azure 上的 Python Web 角色中使用 Numpy 和 Pandas。

我尝试将 numpypandas 添加到 requirements.txt,但这没有用(使用 pip 安装 numpy 通常会导致问题,所以这是预料之中的)。

I followed this advice and downloaded numpy as a wheel from http://www.lfd.uci.edu/~gohlke/pythonlibs/ 并将文件放在 web 角色的根目录下。现在 requirements.txt 看起来像这样:

azure>=0.8.0
azure-storage-logging
requests_futures
numpy-1.9.3+mkl-cp34-none-win32.whl
pandas

我远程进入虚拟机并在 C:\Resources\Directory44b9f2b424470aa191d9c178d06399.WorkerRole1.DiagnosticStore\LogFiles\ConfigureCloudService:

中找到了一些日志
Storing debug log for failure in D:\Windows\system32\config\systemprofile\pip\pip.log
pip 1.5.6 from D:\Python34\lib\site-packages (python 3.4)
Unpacking e:\approot\numpy-1.9.3+mkl-cp34-none-win32.whl
Cleaning up...
Exception:
Traceback (most recent call last):
  File "D:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "D:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "D:\Python34\lib\site-packages\pip\req.py", line 1197, in prepare_files
    do_download,
  File "D:\Python34\lib\site-packages\pip\req.py", line 1364, in unpack_url
    unpack_file_url(link, location, download_dir)
  File "D:\Python34\lib\site-packages\pip\download.py", line 640, in unpack_file_url
    unpack_file(from_path, location, content_type, link)
  File "D:\Python34\lib\site-packages\pip\util.py", line 621, in unpack_file
    unzip_file(filename, location, flatten=not filename.endswith(('.pybundle', '.whl')))
  File "D:\Python34\lib\site-packages\pip\util.py", line 510, in unzip_file
    fp.write(data)
OSError: [Errno 28] No space left on device

Storing debug log for failure in D:\Windows\system32\config\systemprofile\pip\pip.log

如何让 Numpy 工作?

根据您的描述,您似乎在 Azure Could Service 上托管了您的 python 应用程序。如果您使用 Visual Studio 作为您的 IDE,我建议您可以按照以下解决方案:

您可以尝试在 Web 角色包中将 python 虚拟环境设置为 python 运行时,并利用 Visual Studio 我们可以在 python 中配置和部署云服务一个轻松。

1、在你的Azure云服务项目解决方案中,右键点击你的web角色包下的Python环境,点击添加虚拟环境

2、如果你将虚拟环境命名为env,VS会在你的web角色根目录下创建一个名为env的VE文件夹。将 wheel 文件 numpy-1.9.3+mkl-cp34-none-win32.whl 复制到 env 文件夹中。

3、配置requirements.txt,完整配置pandasnumpy的依赖,下面是我的requirements.txt在azure包旁边的样子:

pandas
numpy-1.9.3+mkl-cp34-none-win32.whl
six
pytz

4、右击解决方案树中的虚拟环境,点击Install from requirements.txt安装所有包。

5,然后部署到 Azure

我这边用这个方法效果很好。如有任何疑问,请随时告诉我。

我的情况是C盘太满了。您PC中所有进程的所有临时文件都存储在C盘中,所以大包已满无法安装。

我已经为此工作了大约 3 天,在调试了 pip 代码和其他零碎的东西之后,我的修复是:

iex "$env:PYPATH\Scripts\pip.exe install -b e:\approot\stuff -r requirements.txt"

注意-b。

出于某种原因 Windows/Python 认为标准临时目录中 运行 空间不足:c:\resources\app_id.....(当已满 > 200GB 时)

通过使用 -b 强制 pip 使用您自己的构建目录,该目录不会填满。

好开心

我在安装 Numpy 时遇到了同样的问题。

我从这个 article 获取的 Azure Web 角色的基本模板。 作为修复此错误的想法,我从 答案中获取。

我将 tmp 本地存储添加到我的 RoleProperties:

之后对 ServiceDefinition.csdef 中的启动任务进行了更改。为 "tempdir" 添加了一个变量:

<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd 
PipInstaller.ps1">
    <Environment>
      <Variable name="EMULATED">
        <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
      </Variable>
      <Variable name="TEMPDIR">
        <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='tempdir']/@path" />
      </Variable>
      <Variable name="PYTHON2" value="off" />
    </Environment>
  </Task>

最后一步。更改 "PipInstaller.ps1" 以强制 pip 使用 "tempdir" 作为构建目录:

$tmp_dir = $env:TEMPDIR
py -m pip install -b $tmp_dir -r ..\requirements.txt