分类目录归档:Python

解决pycurl安装错误

由于libcurl的源码编译因素,在安装pycurl可能会导致以下两种错误。

错误1

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

错误2

ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)

解决办法:

错误1的解决办法如下:

# pip uninstall pycurl

# export PYCURL_SSL_LIBRARY=openssl

# pip install pycurl

错误2的解决办法如下:

# pip uninstall pycurl

# export PYCURL_SSL_LIBRARY=nss

# pip install pycurl

 

以下是网上一些更详细的解决办法

pip uninstall pycurl

export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]

pip install pycurl

#xor

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz

#...

python setup.py --with-[nss|openssl|ssl|gnutls] install

 


 

scrapy在Window7和Centos6.5下的安装

在window下直接使用pip进行安装scrapy,可能会失败,原因是scrapy依赖比较多的其它库如pyopenssl\twisted等第三方库,这些库有一些是需要使用vc进行编译的,而这些库有可能也是需要Git进行下载。

也许到这里你已经知道需要准备什么环境来安装scrapy了。正是如下所示:

1.安装ActivePython-2.7.8.10-win32,内置了pip,easy_install这个包管理工具,省去了不少麻烦。

2.安装visual studio 2008+,+表示可以更新的版本如VS2010、VS2012等。

3.安装Git-1.9.2-preview。

4.pip install scrapy,耐心等待可以了。

 

在CentOS中呢?会遇到比较多的麻烦,原因是centos系统自带了python2.6版本,而我们开发使用的版本是2.7.x版,在centos中的yum包管理工具,直接依赖python2.6,如果直接使用python2.7.x源码编译然后make install方式安装,会导致yum工具无法使用,这是我们不愿意看到的。使用activepython2.7.8就可以避免了吗?答案是NO,但为什么仍然使用它呢?原因是它集成了较多开发包和工具,很省事。

安装顺序如下:

1.安装ActivePython-2.7.8.10-linux,点击install.sh文件,安装到/activepython2.7目录下。

2.使用vim在/etc/profile文件尾部添加执行路径,如下:

export PATH=/activepython2.7/bin: $PATH

3.运行source /etc/profile,在当前终端上激活该路径。

4.运行echo $PAHT检查目标路径是否在输出结果中。

5.检查pip 和easy_install 命令是否正常。

6.在安装scrapy前先根据如下命令安装编译环境。

yum erase firefox,如果不想升级firefox,可把firefox的安装命令移除,一般情况下erase firefox后,需要重启系统。

yum -y install firefox  gcc gcc-c++ autoconf automake gdb git perl svn libtool flex bison  pkgconfig vim subversion git lrzsz  openssl curl wget curl p7zip mysql安装所有基础开发环境。

yum install -y python-devel libxml2-devel libxslt-devel python-lxml sqlite-devel libffi-devel openssl-devel mysql-devel zlib-devel curl-devel 安装scrapy依赖的库文件,如果不安装这些开发库,scrapy会安装失败,本人经历了N多次失败后,才找到所有的依赖库,在找到这些依赖库前,曾多次怀疑centos是否具备安装activepython的条件,而这种怀疑是基于window安装太顺畅所影响的。

yum -y install gcc gcc-c++ autoconf automake git perl svn libtool flex bison pkgconfig vim subversion lrzsz openssl curl wget curl p7zip mysql python-devel libxml2-devel libxslt-devel python-lxml sqlite-devel libffi-devel openssl-devel mysql-devel zlib-devel curl-devel

7.在第6个步骤完成后,就可以直接使用命令如下完成安装了。

pip install scrapy

 

Scrapy的调试

关于scrapy调试问题,较为麻烦,故在百度上搜索,再结合本人实践,有如下方法:

1.直接利用scrapy的cmdline.py执行文件进行调试。如下图:

C:\Python27\Lib\site-packages\scrapy\cmdline.py

crawl dmoz

D:\vipshop\crawls\tutorial\

在命令行执行的命令为:

scrapy crawl dmoz

工程文件目录结构:

方法二:

在scrapy.cfg目录下新建main.py文件,并填上如下代码:

from scrapy import cmdline

cmdline.execute(“scrapy crawl dmoz”.split())

然后就可直接调试该文件了。

方法三:

把scrapy\cmdline.py文件拷贝到与scrapy.cfg相同的目录下,直接调试运行,也是可行的。

此外这也方法也启发我们,我们可以自由地定制我们想要的运行方式,例如在该代码上增加套接字功能又或者增加调度器等,而在scrapy目录下所有关键py文件都支持这样的拷贝,是不是很神奇哦。

Django的调试模式

关闭Django的调试模式,会在程序报错时,显示500或404等错误。但这个错误是无法帮助我们直接找到原因的。故在开发或遇到问题时,应该养成先检查调试模式是否打开的习惯。

image

利用Python的traceback功能打印异常点出错信息

使用Django1.2.5进行网页开发,导入代码调试,发现报告如下错误:

image

再看看源代码:

image

由于是刚刚新装的环境,很多包是不存在,在try except的语句中import settings.py失败,但这种方式已经把包不存在或导入失败的错误隐藏掉了,从而弹出一些莫名其秒的错误,对新手来说,真是一种障碍。

所以在这情况下,只有找到except点,然后增加如下语句:

import traceback

print traceback.format_exc()

这样可以方便直观看到出错原因。

Python与ActivePython-Free版的区别

ActivePython是Python的超集,是基于Python的开源内核,增加了Windows的扩展,以及pip和easy_install工具。简单说即是ActivePython = Python + GUI + PIP + easy_install+其它开发包。

这GUI的扩展是因平台而异,如果是微软Win32平台,则可能会增加com,win32api,mfc模块,如果是Linux的则是什么就没有去对比,如下是通过BCompare工具对比后,ActivePython所增加元素的截图。

image

由此可见,如果是开发人员,则安装ActivePython是可以节省很时间,因为它已经集成了我们常见的PIP和EASY_INSTALL工具。至于Windows扩展包,那就看开发者的需求了。

python配置自定义路径

在python的安装路径site-packets下:如:C:\Python27\Lib\site-packages创建xxx.pth,xxx为import xxx时所导入的包名。

用记事本打开xxx.pth文件。添加库如下内容

D:\\cmwork\\

d:\\cmwork\\xxx\\

在cmwork目录下能找到xxx子目录。

打开python的命令行,依次输入如下命令:

import sys

import sys.path    从sys.path返回路径中,检查刚才所输入的路径是否存在。

import xxx   检查该xxx库是否被正确导入。