Fork me on GitHub
Suzf  Blog

Tag pip

pip_faq - Cannot fetch index base URL

新装了一个 ubuntu, 由于公司内诸多网络限制,未经认证的用户是禁止下载任何东西的。 自己就用 cntlm 搭了一个透明代理供自己科学上网。 hah cntlm 配置我这里就不做过多介绍了,请自行脑补。 配置全局代理
^_^[17:20:51][[email protected] ~]$tail -2  .profile
export http_proxy=http://X.X.X.X:PORT
export https_proxy=http://X.X.X.X:PORT
安装 paramiko
^_^[17:09:33][[email protected] ~]$sudo pip install paramiko
Downloading/unpacking paramiko
  Cannot fetch index base URL https://pypi.python.org/simple/
  Could not find any downloads that satisfy the requirement Flask
Cleaning up...
No distributions at all found for Flask
Storing debug log for failure in /home/lucy/.pip/pip.log
Woops, 不能用 Google 了一把 做了这么一些操作,能用了 喜出望外。 什么鬼? 和缓存有关? 和代理有关?看起来是和sudo 权限有关。
@_@[17:18:20][[email protected] ~]$rm -r ~/.pip/
^_^[17:18:26][[email protected] ~]$sudo -E pip install paramiko
Downloading/unpacking paramiko
  Downloading paramiko-1.16.0-py2.py3-none-any.whl (169kB): 169kB downloaded
Downloading/unpacking pycrypto>=2.1,!=2.4 (from paramiko)
  Downloading pycrypto-2.6.1.tar.gz (446kB): 446kB downloaded
  Running setup.py (path:/tmp/pip_build_root/pycrypto/setup.py) egg_info for package pycrypto
    
Downloading/unpacking ecdsa>=0.11 (from paramiko)
  Downloading ecdsa-0.13-py2.py3-none-any.whl (86kB): 86kB downloaded
  ... ...
顺便来说一下 sudo
用户也可以通过su切换到root用户运行命令。然而与su的启动一个root shell允许用户运行之后的所有的命令不同,sudo可以针对单个命令授予临时权限。sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性。sudo也可以用来以其他用户身份执行命令。此外,sudo可以记录用户执行的命令,以及失败的特权获取。

选项:
  -a type       使用指定的 BSD 认证类型
  -b            在后台运行命令
  -C fd         关闭所有 >= fd 的文件描述符
  -E            在执行命令时保留用户环境
  -e            编辑文件而非执行命令
  -g group      以指定的用户组执行命令
  -H            将 HOME 变量设为目标用户的主目录。
  -h            显示帮助消息并退出
  -i [command]  以目标用户身份运行一个登录 shell
  -K            完全移除时间戳文件
  -k            无效的时间戳文件
  -l[l] command 列出用户能执行的命令
  -n            非交互模式,将不提示用户
  -P            保留组向量,而非设置为目标的组向量
  -p prompt     使用指定的密码提示
  -S            从标准输入读取密码
  -s [command]  以目标用户身份运行 shell
  -U user       在列表时,列出指定用户的权限
  -u user       以指定用户身份运行命令(或编辑文件)
  -V            显示版本信息并退出
  -v            更新用户的时间戳而不执行命令
  --            停止处理命令行参数
 

pip-faq: Error -5 while decompressing data: incomplete or truncated stream

在我执行 `pip install flask-bootstrap` 出现了一个这样的错误
-- error: Error -5 while decompressing data: incomplete or truncated stream

安装/卸载其他包是正常的。唯独管理flask-bootstrap 出现了这样的错误。

版本信息:
#pip --version
pip 7.1.2 from /usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
#python --version
Python 2.7.3

完整的报错信息是:

^_^[15:36:31][root@master01 ~]#pip install flask-bootstrap
Collecting flask-bootstrap
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/basecommand.py", line 211, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/commands/install.py", line 294, in run
    requirement_set.prepare_files(finder)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_set.py", line 334, in prepare_files
    functools.partial(self._prepare_file, finder))
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_set.py", line 321, in _walk_req_to_install
    more_reqs = handler(req_to_install)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_set.py", line 461, in _prepare_file
    req_to_install.populate_link(finder, self.upgrade)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_install.py", line 250, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/index.py", line 486, in find_requirement
    all_versions = self._find_all_versions(req.name)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/index.py", line 404, in _find_all_versions
    index_locations = self._get_index_urls_locations(project_name)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/index.py", line 378, in _get_index_urls_locations
    page = self._get_page(main_index_url)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/index.py", line 818, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/index.py", line 928, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/requests/sessions.py", line 477, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/download.py", line 373, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/cachecontrol/adapter.py", line 36, in send
    cached_response = self.controller.cached_request(request)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/cachecontrol/controller.py", line 102, in cached_request
    resp = self.serializer.loads(request, self.cache.get(cache_url))
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/cachecontrol/serialize.py", line 108, in loads
    return getattr(self, "_loads_v{0}".format(ver))(request, data)
  File "/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/cachecontrol/serialize.py", line 164, in _loads_v2
    cached = json.loads(zlib.decompress(data).decode("utf8"))
error: Error -5 while decompressing data: incomplete or truncated stream

原来在PIP的本地缓存损坏了(在我这里的环境中,默认情况下在 ~/.cache/pip)。
我测试了一下,试图执行 `pip install --no-cache-dir flask-bootstrap`,它工作了。
为了确认这是高速缓存,我执行:

pip uninstall flask-bootstrap
rm -rf ~/.cache/pip/*`
pip install flask-bootstrap

或者  pip install --no-cache-dir install flask-bootstrap

这次它成功了,而它之前总是失败。
我不知道该这个问题是否跟缓存的问题有关。但我的猜测是,PIP被中断下载导致缓存数据被破坏。

 

Flask_Faq : AttributeError: 'module' object has no attribute 'autoescape'

前些天从 "spider_net" 上找了一篇文章 , 大致就是利用 highcharts + flask + mysql 构建的一个简单的监控系统 ,
经过几番挣扎终于还是给捣持出来了 , 现在总结一下 , 分享给大家 . o_O

部分报错信息:

* Detected change in 'flask_web.py', reloading
* Restarting with reloader
X.X.X.X - - [11/Jun/2015 15:24:14] "GET / HTTP/1.1" 500 -
Traceback (most recent call last):
...
...
File "/usr/lib64/python2.6/site-packages/jinja2/utils.py", line 195, in import_string
return getattr(__import__(module, None, None, [obj]), obj)
AttributeError: 'module' object has no attribute 'autoescape'

解决办法:
yum install python-pip -y
pip install --upgrade jinja2

redhat 官方宣称这是一个bug , for more :
https://bugzilla.redhat.com/show_bug.cgi?id=799087

Python pip 简单使用说明

简单来说 pip 就是 Python 的一个包管理工具, 和 yum / apt-get 有异曲同工之妙 。
好了, 会到正文
~\(≧▽≦)/~

1、安装
# yum install python-pip -y

or

# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
# tar -xzvf pip-1.5.4.tar.gz
# cd pip-1.5.4 && python setup.py install

# 升级
pip install --upgrade pip


2. 常用操作
# 安装
# pip install pkgname
# python2 -m pip install pkgname
# python3 -m pip install pkgname

# 卸载
# pip uninstall pkgname

# 升级
# pip install --upgrade pkgname

# 检测更新
# pip list --outdated

# 查看
# pip show --files pkgname

# 查看某个库的信息:
# pip show Jinja2

# 查看已经安装的库:
pip list    or   pip freze

3. FAQ :

ImportError No module named setuptools
请参考《ImportError No module named setuptools解决》

4. 参数说明
# pip -h
Usage:
pip [options]

Commands:
install 安装包.
uninstall 卸载包.
freeze 按着一定格式输出已安装包列表
list 列出已安装包.
show 显示包详细信息.
search 搜索包,类似yum里的search.
wheel Build wheels from your requirements.
zip 不推荐. Zip individual packages.
unzip 不推荐. Unzip individual packages.
bundle 不推荐. Create pybundles.
help 当前帮助.

General Options:
-h, --help 显示帮助.
-v, --verbose 更多的输出,最多可以使用3次
-V, --version 现实版本信息然后退出.
-q, --quiet 最少的输出.
--log-file 覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
--log 不覆盖记录verbose输出的日志.
--proxy Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout 连接超时时间 (默认15秒).
--exists-action Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert 证书.

Learn more : https://pypi.python.org/pypi/pip

Python pip 切换到阿里源

在使用 `pip` 安装 Python 模块的时候我们经常会遇到线面的错误

`ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out.
`

以至于安装模块的时候出现错误,之很让人不爽。

接下来我们将pip的源切换为阿里的源

cd $HOME
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host = mirrors.aliyun.com
EOF