Python 网络托管:Numpy, Matplotlib, 科学计算
我在用Numpy、Scipy和Matplotlib写科学软件。之前我在家里的电脑上开发应用,现在我想写一些简单的网页应用。比如,用户上传图片或音频文件,我的程序用Numpy和Scipy处理这些文件,然后用Matplotlib在浏览器上显示结果,或者让用户下载处理后的文件。
我已经在一个有Python 2.4.3的主机上付费了,但没有Numpy和Scipy。而且我也没有命令行的shell访问权限,只能通过拖放的方式上传文件,这样的限制让我只能运行一些简单的Python/CGI脚本。
让我惊讶的是,网上搜索后发现很少有合适的网络主机可以直接支持这些功能。(如果我错了,请指正。)我正在学习Google App Engine,但对它的工具和限制还不是很了解。网上的信息告诉我,其他人也有类似的担忧。
希望能找到解决方案,我想向优秀的Stack Overflow社区提出几个简单的问题:
有没有简单的方法可以在我已经购买的主机上安装numpy(或者其他第三方包/库)?我知道我主机上的Python路径,也知道我家电脑上相关的Python/Numpy目录。我能不能直接把文件复制过去就能用?两个系统都是Ubuntu。
有没有什么主机网站(免费或付费)已经安装了Numpy/Matplotlib,或者至少可以安装它们?有没有什么文档网站可以参考,哪怕是简单的应用?
Google App Engine能帮我吗?还是说它完全是做其他事情的?你或者其他人用它写过Python/Numpy的科学应用吗?如果有,可以给我参考一下吗?
谢谢你的帮助。
编辑:在下面有用的回答后,我在Slicehost买了20美元的计划,到现在为止我很喜欢这个服务!(我之前试过Amazon EC2,可能我太笨了,就是搞不定它。)设置Ubuntu服务器和Apache只花了几个小时(而且我还是个Apache新手)。这让我可以做我想做的事情,甚至更多。我现在还有自己的远程版本控制库了。再次感谢!
编辑2:快两年后,我又试了Linode和EC2(再次)。Linode很好。这次EC2似乎也变得简单了——可能是因为我积累了经验,或者是Amazon对AWS管理控制台做了改进。对于那些对Numpy/Scipy/Matplotlib/Audiolab感兴趣的人,这里是我每次启动EC2实例时用的Ubuntu备忘单:
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
3 个回答
我还没有权限评论,但我可以提供一个“答案”。
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
很遗憾,App Engine不支持numpy、scipy或matplotlib这些库。
如果你知道你的主机使用的操作系统和CPU类型,你可以为自己做一个完全相同的安装,下载并安装他们使用的Python版本,下载你需要的包的源代码,然后把它们编译成.so
(或.pyd
,这取决于平台)文件,再上传上去——这听起来真是个大工程。
相比之下,很多提供普通虚拟主机的网站(通常是Linux的虚拟机,硬件资源比较有限,但你有root权限,可以用ssh远程访问,还有一个可以用的gcc
编译器)会简单得多——基本上,你可以像在自己的Linux工作站上一样,下载和安装你需要的软件!
1: 在托管空间安装第三方包
你确实可以在你的托管空间里安装第三方包。如果是纯Python包,只需要把它解压到一个文件夹,然后把这个文件夹添加到你的PYTHONPATH环境变量或者sys.path
里就可以了。
不过,这样做可能会很麻烦,尤其是对于编译过的模块。如果你能访问到Python主机的命令行,使用一个叫做virtualenv的工具,可以帮你建立一个私有的Python环境,里面有你需要的库。
要设置你的virtualenv,你可以在命令行输入类似下面的命令:
$ virtualenv $HOME/my_python
$ $HOME/my_python/bin/easy_install numpy
之后,你可以继续使用easy_install来安装你在个人Python环境中需要的其他东西。
现在,当你写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访问,借助命令行你可以用上面提到的方法安装numpy。任何虚拟私人服务器,比如Linode或Slicehost,也允许你安装你想要的东西。
3: AppEngine
如上所述,AppEngine不允许你安装C扩展(但纯Python的可以用),所以在那上面使用numpy的可能性不大,因为我怀疑它的一些功能需要C语言的加速。