Python网络托管:Numpy,Matplotlib,科学计算

45
我使用Numpy/Scipy/Matplotlib编写科学软件,现在我想编写简单的Web应用程序。例如:用户上传图像或音频文件,我的程序使用Numpy/Scipy处理它,然后使用Matplotlib在浏览器上显示输出结果,或者用户可以下载已处理的文件。
我已经购买了支持Python 2.4.3的托管服务,但没有安装Numpy/Scipy。我没有通过命令行访问Shell权限,只能通过拖放FTP实现。虽然很有限制,但我已经可以让简单的Python/CGI脚本正常工作。
令人惊讶的是,网络搜索显示很少有适合这些功能的Web托管选项。 (如果我错了,请指导我。)我正在学习Google App Engine,但我仍然不完全理解其工具和限制。网络告诉我其他人也有类似的问题。
希望得到解决方案,我认为我会向SO社区问这些简单的问题:
1.是否有一种简单的方法可以将numpy(或任何第三方包/库)安装到我已经托管的空间中?我知道我的托管空间上的Python路径,也知道我家庭计算机上的相关Python/Numpy目录。我可以直接复制文件并使其工作吗?本地和远程系统都运行Ubuntu。
2.存在哪些托管站点(免费或付费),其已安装Numpy/Matplotlib或,如果未安装,则可以安装Numpy/Matplotlib?是否有任何文档站点可供参考,其中包含工作应用程序的范例,无论多么简单?
3.Google App Engine能否以任何方式帮助我?还是完全为其他目的而设计?您或其他人是否使用它来编写Python/Numpy的科学应用程序?如果是,请提供参考资料。
感谢您的帮助。
ec2:~$ sudo aptitude install build-essential python-scipy ipython 
       python-matplotlib python-dev python-setuptools libsndfile-dev 
       libasound2-dev mysql-server python-mysqldb 

Upload scikits.audiolab-0.11.0

ec2:~/scikits.audiolab-0.11.0$ sudo python setup.py install

ec2:~$ sudo rm -rf scikits.audiolab-0.11.0

ec2:~$ nano .ipython/ipy_user_conf.py

ip.ex('import matplotlib; matplotlib.use("Agg"); import scipy, pylab, 
       scipy.signal as sig, scipy.linalg as lin, scipy.sparse as spar, 
       os, sys, MySQLdb, boto; from scikits import audiolab')

import ipy_greedycompleter

import ipy_autoreload
4个回答

18

1:安装托管空间的第三方软件包

您确实可以将第三方软件包安装到您的托管空间中。如果它是一个纯Python软件包,只需要将其解压到一个目录中,然后将该目录添加到您的PYTHONPATH环境变量或sys.path中即可。

这样做可能会很繁琐,并且不容易适用于编译模块。如果您可以访问Python主机的shell,则可以使用优秀的virtualenv软件包设置一个具有自己库的私有Python环境。

要设置您的virtualenv,您需要在shell中执行以下操作:

$ virtualenv $HOME/my_python
$ $HOME/my_python/bin/easy_install numpy

如果有其他东西需要在您的个人Python环境中安装,您可以继续运行easy_install。

现在,当您编写Python脚本时,如果可能的话,您将想要使用您的私有Python解释器:

#!/home/myuser/my_python/bin/python

import numpy

# script here

如果您的 Python 环境无法指定,例如通过 mod_wsgi 运行时,则需要将其添加到导入路径中:

import sys
sys.path.insert(0, '/home/myuser/my_python/lib/python2.5/site-packages')

import numpy

2: 使用numpy的托管站点

我暂时想不到有哪些托管站点提供预安装的numpy。但是,Dreamhost / Bluehost提供SSH访问权限,并且通过shell访问,您可以使用我上面描述的方法安装numpy。任何虚拟专用服务器,例如Linode/Slicehost,都允许您安装所需的任何软件。

3: AppEngine

如上所述,AppEngine将不允许您安装C扩展(但纯Python扩展可以正常工作),因此在那里使用numpy的可能性很小,因为我怀疑其中一些功能使用了C加速。


不要使用sys.path.insert(),而是使用site.addsitedir()。后者可以正确解释site-packages目录中的.pth文件。还有一些需要处理的重新排序问题。请阅读'http://code.google.com/p/modwsgi/wiki/VirtualEnvironments'。 - Graham Dumpleton
numpyе’ЊmatplotlibењЁPython 2.7зљ„App EngineдёЉдёЌеЏ—ж”ЇжЊЃгЂ‚ - Dima Tisnek

14

很遗憾,App Engine不支持numpy、scipy或matplotlib。

如果你知道你的主机使用的操作系统和CPU型号,你可以为自己创建一个完全相同的安装环境,并下载和安装与他们使用的Python版本相同的软件,下载所需软件包的源代码并将它们构建成.so文件(或者.pyd,具体取决于平台),然后上传这些文件——听起来像是一项真正的壮举。

任何提供普通虚拟托管服务的网站(通常是基于Linux的虚拟机,拥有适度的硬件资源,但用户拥有root权限、ssh shell访问以及可以特别使用的gcc编译器)都会更容易使用——基本上,你将以与在自己的Linux工作站上安装软件几乎相同的方式下载和安装所需软件!


对于虚拟主机,我一直在使用Slicehost。Amazon EC2是另一个流行的选择。 - airportyh
只是又一位赞成切换到虚拟服务器解决方案的人。我曾经在共享主机上组建一个解决方案,但却被托管服务的管理政策更改所击败。我已经使用www.maxvps.com网站的虚拟服务器帐户两年了,并且非常成功地安装了我想要的任何Python fireworks。 - Vincent Marchetti
Alex:谢谢你清晰的回答。那么,如果我使用其中一个常见的虚拟主机,并获得了根权限和Shell访问权限,我是否可以像在家里一样使用“apt-get install”来安装软件包呢?那将太棒了。为了省钱,我会先尝试修改我现有的空间是否可行。 - Steve Tjoa
1
numpy和matplotlib不支持使用Python 2.7的App Engine。 - Dima Tisnek
一个更新:当我今天(2014年5月24日)检查时,Google App Engine支持Python 2.7的Numpy和matplotlib。Scipy仍然失踪。 - Peter D

9

有哪些网站(无论免费还是付费)提供Numpy/Matplotlib安装的主机?

PythonAnywhere提供网络托管和一个简单的浏览器 IDE;许多 Python 包(包括 NumPy 和 Matplotlib)都已经预先安装了。该网站有一个免费计划可供使用,你可以用它来尝试一下,此外还有“高级”和“托管”帐户,分别为每月 $5 和 $10。

完整披露:我在那里工作...


6

我还没有评论的权限,但我可以提供一个“答案”。

3:AppEngine

Numpy现在可以在Google App Engine上使用: https://code.google.com/p/googleappengine/issues/detail?id=190

然而,matplotlib仍在等待中: http://code.google.com/p/googleappengine/issues/detail?id=482 也许更多人关注这个问题会使它发生。

我注意到svgfig是一个选项,因为它是纯Python: http://code.google.com/p/svgfig/

更新:

结果matplotlib现在可以使用了: https://developers.google.com/appengine/docs/python/tools/libraries27#matplotlib


感谢您指出GAE最近(一周前)的更新!http://googleappengine.blogspot.in/2012/02/announcing-general-availability-of.html - Steve Tjoa

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