标签 python 下的文章

当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件。你可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用。

$ ls /usr/bin/python*
/usr/bin/python  /usr/bin/python2  /usr/bin/python2.7  /usr/bin/python3  /usr/bin/python3.4  /usr/bin/python3.4m  /usr/bin/python3m

执行如下命令查看默认的 Python 版本信息:

$ python --version
Python 2.7.8

1、基于用户修改 Python 版本:

想要为某个特定用户修改 Python 版本,只需要在其 home 目录下创建一个 alias(别名) 即可。打开该用户的 ~/.bashrc 文件,添加新的别名信息来修改默认使用的 Python 版本。

alias python='/usr/bin/python3.4'

一旦完成以上操作,重新登录或者重新加载 .bashrc 文件,使操作生效。

$ . ~/.bashrc

检查当前的 Python 版本。

$ python --version
Python 3.4.2

2、 在系统级修改 Python 版本

我们可以使用 update-alternatives 来为整个系统更改 Python 版本。以 root 身份登录,首先罗列出所有可用的 python 替代版本信息:

# update-alternatives --list python
update-alternatives: error: no alternatives for python

如果出现以上所示的错误信息,则表示 Python 的替代版本尚未被 update-alternatives 命令识别。想解决这个问题,我们需要更新一下替代列表,将 python2.7python3.4 放入其中。

# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
# update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode

--install 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中。这个例子中,我们为 /usr/bin/python3.4 设置的优先级为2,所以 update-alternatives 命令会自动将它设置为默认 Python 版本。

# python --version
Python 3.4.2

接下来,我们再次列出可用的 Python 替代版本。

# update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.4

现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。

# update-alternatives --config python

# python --version
Python 2.7.8

3、移除替代版本

一旦我们的系统中不再存在某个 Python 的替代版本时,我们可以将其从 update-alternatives 列表中删除掉。例如,我们可以将列表中的 python2.7 版本移除掉。

# update-alternatives --remove python /usr/bin/python2.7
update-alternatives: removing manually selected alternative - switching python to auto mode
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode

via: http://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux

译者:mr-ping 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

作为一个热衷于 php 的家伙,我已经习惯了使用 phpinfo() 函数来让我轻松访问 php.ini 里的配置和加载的模块等信息。当然我也想要使用一个不存在的 pyinfo() 函数,但没有成功。按下 CTRL-E,google 一下是否有人实现了它?

是的,有人已经实现了。但是,对我来说它非常难看。荒谬!因为我无法忍受丑陋的布局,咳咳,我不得不亲自动手来改改。我用找到的代码,并重新进行布局使之更好看点。Python 官方网站的布局看起来不错,那么何不借用他们的颜色和背景图片呢?是的,这听起来像一个计划。

提醒你下,我仅仅在 Python 2.6.4 上运行过它,所以在别的版本上可能有风险(将它移植到任何其他版本它应该是没有问题的)。要使用它,只需要导入该文件, 并调用pyinfo()函数得到它的返回值打印到屏幕上。好嘞!

如果你在使用 mod\_wsgi 时没有得到正确的返回结果,你可以如下运行它(当然得替换路径):

def application(environ, start_response):
    import sys
    path = 'YOUR_WWW_ROOT_DIRECTORY'
    if path not in sys.path:
        sys.path.append(path)
    from pyinfo import pyinfo
    output = pyinfo()
    start_response('200 OK', [('Content-type', 'text/html')])
    return [output]

via:http://bran.name/articles/pyinfo-a-good-looking-phpinfo-like-python-script/

作者:Bran van der Meer 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

Python是一个高级、通用、结构化且强大的开源编程语言,广泛用于各种编程工作。它拥有一个全动态类型系统和自动内存管理,与Scheme,Ruby,Perl和Tcl的十分相似,避免编译型语言的许多复杂地方和难以理解。Python于1991年由Guido van Rossum创造,然后逐渐成长,流行。

Python是一个非常实用,而且流行的计算机编程语言。使用一个如Python这样的解释型语言的好处之一就是,可以借助其交互的shell探索式地编程。你可以试着代码,而不必专门写一个脚本。但是Python shell也有一些局限性。基本来说,有许多很漂亮的Python shell可选择,都是在基础shell上扩展的。他们每一个都提供了一个极好的交互性的Python 体验。

bpython

对于Linux,BSD,OS X和Windows来说,bpython是一个不错的Python解释器的界面。

其想法是提供给用户所有的内置功能,很像现在的IDE(集成开发环境),但是是在一个简单,轻量级的包里,可以在终端窗口里面运行。

bpython并不追求创造任何新的或者开创性的东西。相反,它聚集了一些简洁的理念,关注于实用性和操作性。

功能包括:

  • 内置的语法高亮 - 使用Pygments排版你敲出的代码,并合理配色
  • 根据你的行为,显示自动补全的建议
  • 为任何Python函数列出所期望的参数 - 可以显示你调用的任何函数的参数列表
  • “Rewind”功能会调出内存里的最后一行代码并重新执行
  • 可以将你输入的代码送到pastebin
  • 可以将你输入的代码保存到一个文件
  • 自动缩进
  • 支持Python 3
  • 网址: www.bpython-interpreter.org
  • 开发者: Bob Farrell and contributors
  • 证书: MIT License
  • 版本号: 0.14.1

IPython

IPython是Python shell的一个交互加强版。她提供了一个丰富的工具集合,帮助你交互式地充分利用Python。

IPython可以用来取代标准的Python shell,也可以与标准Python科学和数值处理工具配合,用做一个科学计算(如Matlab或者Mathematical)的完整工作环境。她支持动态对象内省,有限的输入/输出提示,一个宏系统,会话日志,会话恢复,访问完整的系统外壳,详尽且彩色的追踪报告,自动圆括号补全,自动引号补全和可嵌入其他Python程序。

功能包括:

  • 强大的交互Shell(基于终端或者Qt)
  • 一个基于浏览器的记事本,支持代码,富文本,数学表达式,内置图表和其他富媒介。
  • 支持交互式的数据可视化和使用GUI工具箱
  • 灵活,嵌入式的解释器可以加载进你自己的项目里
  • 易于使用,高效的并行运算工具
  • 网址: ipython.org
  • 开发者: The IPython Development Team
  • 证书: BSD
  • 版本号: 3.1

DreamPie

DreamPie是一个为可靠性和趣味性设计的Python shell。

DreamPie可以用于任何Python解释器(Jython,IronPython,PyPy)。

功能包括:

  • 一个新式的交互shell:窗口被分成历史区域和代码区域,历史区域可以让你看到之前的命令及其输出,代码区域是里敲代码的地方。这样,你可以编辑任意多的代码,就好像在你最喜欢的编辑器里一样,并且适当时候可以执行它。你也可以从其他地方复制代码,编辑并马上运行它
  • “只复制代码”命令可以复制你想要的代码,以便你可以把它存入一个文件。代码已经用四个空格缩进进行格式化
  • 自动补全属性和文件名字
  • 自动显示函数参数和文档
  • 在结果历史中保存你最近的结果,备以后用
  • 可以自动折叠很长的输出,以便你可以专注于重要的地方
  • 保存会话的历史记录为一个HTML文件,备以后查询。你可以加载历史文件到DreamPie里,并且快速重复之前的命令。
  • 自动添加圆括号与可选的引号,当你在函数与方法后按下空格键。例如,键入execfile后按下空格会提示execfile("fn")
  • 支持交互的matplotlib绘图
  • 支持Python 2.5,Python 2.6,Python 3.1,Jython 2.5,IronPython 2.6和PyPy
  • 难以置信的快速反应
  • 网址: www.dreampie.org
  • 开发者: Noam Yorav-Raphael
  • 证书: GNU GPL v3
  • 版本号: 1.2.1

via: http://www.linuxlinks.com/article/20150523032756576/PythonShells.html

作者:Frazer Kline 译者:wi-cuckoo 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出


许多电脑呆子知道可以用speedtest.net测试网速,但是这个不能在测试中给你足够的控制。Linux用户喜欢在终端中输入命令来完成任务,至少我就是这样的。

tespeed是一款有很多特性的python工具,可以在终端在测试网速。根据文档说明,它利用了speedtest.net的服务器,但是用户可以手动指定。

最初作者用php语言写了tespeed工具,并且证明了ISP提供的网络远低于它广告中所说的那样。但是事情并不是一直如他们想的那样,因此作者移植他的php脚本到python中,并且他的工具在github中已经有180个star了。

It means alot

如何在linux中测试tespeed

在你电脑上运行这个python程序前先确保系统已经满足了这个工具的依赖。tespeed依赖下面两个包:

  • lxml
  • SocksiPy

你可以用pip包管理系统来安装lxml,只要用下面的命令就行。

pip install lxml

现在我们需要输入下面的命令来下载安装SocksiPy。

wget http://sourceforge.net/projects/socksipy/files/socksipy/SocksiPy%201.00/SocksiPy.zip/

下载完成后 解压SocksiPy.zip并运行下面的命令来克隆tespeed仓库到你本地机器中。

git clone https://github.com/Janhouse/tespeed.git

接着把SocksiPy文件夹放到你克隆下来的tespeed项目中。现在我们要像截图那样在SocksiPy中的创建一个叫*init.py*的空文件。

simple trick to make tespeed work

现在我们已经解决了项目的依赖问题,我们可以用下面的命令运行了。

python tespeed.py

接下来就会发生一些神奇的事了。程序会测试你的下载和上传速度并且在你的终端中用漂亮的颜色显示出来。

testing download and upload speed with tespeed python application

在tespeed中有很多选项,如-ls来列出服务器,-p来指定代理服务器, -s来阻止调试(STDERR)输出, 还有很多我们会在本教程中探索。

如果你想要结果显示成MB,你可以在python tespeed.py 后面接上选项 -mib

python tespeed.py -mib

在你使用了-mib选项后你可以看到计量网速的单位改变了。

testing internet speed with tespeed python application

我非常喜欢用的一个选项是-w,它可以把标准输出转化成CSV格式。

python tespeed.py -w

使用下面的命令来列出服务器。

python tespeed -ls

运行上面的命令后,你会看到可以用于测试上传和下载速度的服务器列表。我的列表非常长,所以我不会在教程中共享了。

总结

tespeed的确是一款帮助用户在终端中测试上传和下载速度的高性能python脚本。它支持很多的选项并且你可以指定列表中你想使用的服务器。继续使用tespeed并在留言区写下你们的体验吧。


via: http://linoxide.com/tools/tespeed-python-tool-test-internet-speed/

作者:Oltjano Terpollari 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

这是一款提取网站数据的开源工具。Scrapy框架用Python开发而成,它使抓取工作又快又简单,且可扩展。我们已经在virtual box中创建一台虚拟机(VM)并且在上面安装了Ubuntu 14.04 LTS。

安装 Scrapy

Scrapy依赖于Python、开发库和pip。Python最新的版本已经在Ubuntu上预装了。因此我们在安装Scrapy之前只需安装pip和python开发库就可以了。

pip是作为python包索引器easy\_install的替代品,用于安装和管理Python包。pip包的安装可见图 1。

sudo apt-get install python-pip

Fig:1 Pip installation

图:1 pip安装

我们必须要用下面的命令安装python开发库。如果包没有安装那么就会在安装scrapy框架的时候报关于python.h头文件的错误。

sudo apt-get install python-dev

Fig:2 Python Developer Libraries

图:2 Python 开发库

scrapy框架既可从deb包安装也可以从源码安装。在图3中我们用pip(Python 包管理器)安装了deb包了。

sudo pip install scrapy 

Fig:3 Scrapy Installation

图:3 Scrapy 安装

图4中scrapy的成功安装需要一些时间。

Fig:4 Successful installation of Scrapy Framework

图:4 成功安装Scrapy框架

使用scrapy框架提取数据

基础教程

我们将用scrapy从fatwallet.com上提取商店名称(卖卡的店)。首先,我们使用下面的命令新建一个scrapy项目“store name”, 见图5。

$sudo scrapy startproject store_name

Fig:5 Creation of new project in Scrapy Framework

图:5 Scrapy框架新建项目

上面的命令在当前路径创建了一个“store\_name”的目录。项目主目录下包含的文件/文件夹见图6。

$sudo ls –lR store_name

Fig:6 Contents of store_name project.

图:6 store\_name项目的内容

每个文件/文件夹的概要如下:

  • scrapy.cfg 是项目配置文件
  • store\_name/ 主目录下的另一个文件夹。 这个目录包含了项目的python代码
  • store\_name/items.py 包含了将由蜘蛛爬取的项目
  • store\_name/pipelines.py 是管道文件
  • store\_name/settings.py 是项目的配置文件
  • store\_name/spiders/, 包含了用于爬取的蜘蛛

由于我们要从fatwallet.com上如提取店名,因此我们如下修改文件(LCTT 译注:这里没说明是哪个文件,译者认为应该是 items.py)。

import scrapy

class StoreNameItem(scrapy.Item):

   name = scrapy.Field()   #  取出卡片商店的名称

之后我们要在项目的store\_name/spiders/文件夹下写一个新的蜘蛛。蜘蛛是一个python类,它包含了下面几个必须的属性:

  1. 蜘蛛名 (name )
  2. 爬取起点url (start\_urls)
  3. 包含了从响应中提取需要内容相应的正则表达式的解析方法。解析方法对爬虫而言很重要。

我们在storename/spiders/目录下创建了“storename.py”爬虫,并添加如下的代码来从fatwallet.com上提取店名。爬虫的输出写到文件(StoreName.txt)中,见图7。

from scrapy.selector import Selector
from scrapy.spider import BaseSpider
from scrapy.http import Request
from scrapy.http import FormRequest
import re
class StoreNameItem(BaseSpider):
name = "storename"
allowed_domains = ["fatwallet.com"]
start_urls = ["http://fatwallet.com/cash-back-shopping/"]

def parse(self,response):
output = open('StoreName.txt','w')
resp = Selector(response)

tags = resp.xpath('//tr[@class="storeListRow"]|\
         //tr[@class="storeListRow even"]|\
         //tr[@class="storeListRow even last"]|\
          //tr[@class="storeListRow last"]').extract()
for i in tags:
i = i.encode('utf-8', 'ignore').strip()
store_name = ''
if re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S):
store_name = re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S).group()
store_name = re.search(r">.*?<",store_name,re.I|re.S).group()
store_name = re.sub(r'>',"",re.sub(r'<',"",store_name,re.I))
store_name = re.sub(r'&amp;',"&",re.sub(r'&amp;',"&",store_name,re.I))
#print store_name
output.write(store_name+""+"\n")

Fig:7 Output of the Spider code .

图:7 爬虫的输出

注意: 本教程的目的仅用于理解scrapy框架


via: http://linoxide.com/ubuntu-how-to/scrapy-install-ubuntu/

作者:nido 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会。回到大学我希望他们教我的是Python而不是Java,这学起来很有趣且在实际的应用如yum包管理器中很有用。

本篇教程中我会带你使用python和一个称为flask的微型框架来构建一个简单的应用,来显示诸如每个进程的内存使用,CPU百分比之类有用的信息。

前置需求

Python基础、列表、类、函数、模块。HTML/CSS (基础)。

学习这篇教程你不必是一个python高级开发者,但是首先我建议你阅读 https://wiki.python.org/moin/BeginnersGuide/NonProgrammers

在Linux上安装Python 3

在大多数Linux发行版上Python是默认安装的。下面的你命令可以让你看到安装的版本。

[root@linux-vps ~]# python -V
Python 2.7.5

我们会使用3.x的版本来构建我们的app。根据Python.org所说,现在只对这个版本进行改进,而且不向后兼容Python 2。

注意: 在开始之前,我强烈建议你在虚拟机中尝试这个教程,因为Python是许多Linux发行版的核心组件,任何意外都可能会损坏你的系统。

以下步骤是基于红帽的版本如CentOS(6和7),基于Debian的版本如UbuntuMint和Resbian可以跳过这步,Pythonn 3应该默认已经安装了。如果没有安装,请用apt-get而不是yum来安装下面相应的包。

[leo@linux-vps] yum groupinstall 'Development Tools'
[leo@linux-vps] yum install -y zlib-dev openssl-devel sqlite-devel bzip2-devel
[leo@linux-vps] wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
[leo@linux-vps] tar -xvzf Python-3.4.2.tgz
[leo@linux-vps] cd Python-3.4.2
[leo@linux-vps] ./configure
[leo@linux-vps] make
# 推荐使用 make altinstall 以覆盖当前的 python 库
[leo@linux-vps]   make altinstall

成功安装后,你应该可以用下面的命令进入Python3.4的shell了。

[leo@linux-vps]# python3.4
Python 3.4.2 (default, Dec 12 2014, 08:01:15)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit ()

使用pip来安装包

Python有它自己的包管理去,与yum和apt-get相似。你将需要它来下载、安装和卸载包。

[leo@linux-vps] pip3.4 install "packagename"    
[leo@linux-vps] pip3.4 list
[leo@linux-vps] pip3.4 uninstall "packagename"

Python虚拟环境

在Python中虚拟环境是一个放置你的项目的依赖环境的目录。这是一个将带有不同的依赖环境的项目隔离的好办法。它可以让你不用sudo命令就能安装包。

[leo@linux-vps] mkdir python3.4-flask
[leo@linux-vps] cd python3.4-flask 
[leo@linux-vps python3.4-flask] pyvenv-3.4 venv

要创建虚拟环境你需要使用“pyvenv-3.4”命令。上述命令会在venv文件夹的内部创建一个名为lib的目录,这里会安装项目所依赖的包。这里同样会创建一个bin文件夹容纳该环境下的pip和python可执行文件。

为我们的Linux系统信息项目激活虚拟环境

 [leo@linux-vps python3.4-flask] source venv/bin/activate
 [leo@linux-vps python3.4-flask] which pip3.4
~/python3.4-flask/venv/bin/pip3.4
[leo@linux-vps python3.4-flask] which python3.4
~/python3.4-flask/venv/bin/python3.4

使用pip安装flask

让我们继续安装第一个模块flask框架,它可以处理访问路由和渲染显示我们app的模板。

[leo@linux-vps python3.4-flask]pip3.4 install flask

在flask中创建第一个应用

第一步:创建你app的目录

 [leo@linux-vps python3.4-flask] mkdir  app
 [leo@linux-vps python3.4-flask] mkdir app/static
 [leo@linux-vps python3.4-flask] mkdir app/templates

在python3.4-flask文件夹中创建一个名为app的文件夹,它包含了两个子文件夹“static”和“templates”。我们的Python脚本会放在app文件夹,像css/js这类文件会在static文件夹,template文件夹会包含我们的html模板。

第二步:在app文件夹内部创建一个初始化文件

[leo@linux-vps python3.4-flask] vim app/_init_.py
from flask import Flask

app = Flask(__name__)
from app import index

这个文件会创建一个Flask的新的实例,并加载我们存储在index.py文件中的python程序——这个文件我们之后会创建。

[leo@linux-vps python3.4-flask]vim app/index.py
from app import app

@app.route('/')
def index():
 import subprocess
 cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 out,error = cmd.communicate()
 memory = out.splitlines()    

    return 

flask中的访问路由通过“路由装饰器”处理。它用于将一个 URL 绑定到函数。

@app.route('/')
@app.route('/index') 

要在python中运行shell命令,你可以使用Subprocess模块中的Popen类。

subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)

这个类会使用一个列表作为参数,列表的第一项默认是可执行的程序,下一项会是参数,这里是个另外一个例子。

subprocess.Popen(['ls', ‘-l’],stdout=subprocess.PIPE,stderr=subprocess.PIPE)

stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen的communicate方法来访问输出。

out,error = cmd.communicate()

要更好地用html模板显示输出,我会使用splitlines()方法,

memory = out.splitlines()

关于subprocess模块更多的信息会在教程的最后给出。

第三步:创建一个html模板来显示我们命令的输出。

要做到这个我们使用flask中的Jinja2模板引擎来为我们渲染。

最后你的index.py文件应该看起来像这样:

from flask import render_template
from app import app

def index():
 import subprocess
 cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 out,error = cmd.communicate()
 memory = out.splitlines()     

return render_template('index.html', memory=memory)

现在在你的模板目录下创建一个index.html模板,flask会自动搜索这个目录下的模板。

[leo@linux-vps python3.4-flask]vim app/templates/index.html


Memory usage per process

{% for line in memory %}
    {{ line.decode('utf-8') }} 

   {% endfor %}

Jinja2模板引擎允许你使用“{{ … }}”分隔符来输出结果,{% … %}来做循环和赋值。我使用“decode()”方法来格式化。

第四步:运行app

[leo@linux-vps python3.4-flask]vim run.py
from app import app
app.debug = True
app.run(host='174.140.165.231', port=80)

上面的代码会在debug模式下运行app。如果你不指定 IP 地址和端口,默认则是localhost:5000。

[leo@linux-vps python3.4-flask] chmod +x run.py
[leo@linux-vps python3.4-flask] python3.4 run.py

我已经加了更多的代码来显示CPU、I/O和平均负载。

你可以在这里浏览完整的代码。

这是一个对flask的简短教程,我建议你阅读下面的教程和文档来更深入地了解。

http://flask.pocoo.org/docs/0.10/quickstart/

https://docs.python.org/3.4/library/subprocess.html#popen-constructor

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world


via: http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/

作者:Leo G 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出