"设备上没有剩余空间"在Azure Web角色上安装Numpy时

时间:2015-12-07 10:07:41

标签: python azure numpy pip azure-web-roles

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

我尝试将numpypandas添加到requirements.txt,但这没有用(使用pip来安装numpy经常导致问题,所以这是预期的)。< / p>

I followed this advice并从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载numpy作为轮子,并将该文件放在Web角色的根目录中。现在requirements.txt看起来像这样:

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

我远程登录虚拟机并在C:\Resources\Directory\7044b9f2b424470aa191d9c178d06399.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工作?

4 个答案:

答案 0 :(得分:1)

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

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

1,在Azure Cloud Service项目解决方案中,右键单击Web角色包下的 Python环境,单击添加虚拟环境enter image description here

2,如果您将虚拟环境命名为env,VS将在您的Web角色根目录中创建名为env的VE文件夹。将轮文件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,右键单击解决方案树中的虚拟环境,单击从requirements.txt安装以安装所有软件包。

enter image description here

5,然后将其部署到Azure

通过这种方法在我身边工作正常。如有任何疑虑,请随时告诉我。

答案 1 :(得分:0)

在我的情况下,它是由驱动器C引起的:太满了。 PC中所有进程的所有临时文件都存储在Drive C:中,因此当它已满时无法安装大包。

答案 2 :(得分:0)

我已经完成了大约3天的工作,在调试了pip代码和其他零碎之后,我的解决方案是:

iex&#34; $ env:PYPATH \ Scripts \ pip.exe install -b e:\ approot \ stuff -r requirements.txt&#34;

注意-b。

出于某种原因,Windows / Python认为它在标准临时目录中已经用完了空间:c:\ resources \ app_id .....(当时有> 200GB已满)

使用-b强制pip使用你自己的Build目录,但不会填满。

得很开心

答案 3 :(得分:0)

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

我从此article获取的Azure Web角色的基本模板。 作为修复此错误的想法,我从Gordon's回答。

我将tmp Local Storage添加到了我的RoleProperties:

enter image description here

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

#lang typed/racket
; comment the following line for typed/racket
;(define-syntax : (syntax-rules () ((_ id type) (void))))
(: fact (-> Integer Integer))

; the rest of the file is common to both racket and typed/racket
(define (fact n) (if (zero? n) 1 (* n (fact (sub1 n)))))

最后一步。更改了“PipInstaller.ps1”以强制使用“tempdir”作为Build目录:

<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>