赖勇浩(http://laiyonghao.com)

我一直习惯使用 setuptools 来安装 python 的程序库,因为 easy_install 实在是太简单实用了。但因为公司的网络环境比较严格,把具有登陆功能的 pypi.python.org 域名给禁用了,开放的是 c.pypi.python.org 镜像,使用 setuptools 安装 python 程序库的时候有些包下载不了,如下:

xxx@ubuntu:~# easy_install -i http://c.pypi.python.org/simple -U lxml
Searching for lxml
Reading http://c.pypi.python.org/simple/lxml/
Reading http://codespeak.net/lxml
Reading http://lxml.de/
Best match: lxml 2.3.3
Downloading http://pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz
error: Can't download http://pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz: 403 Forbidden

后来发现是其尝试机制有问题,其实 lxml-2.3.3.tar.gz 在镜像站中本身就有,只是 easy_install 尝试了一次下载链接不成功后就放弃了。太不够执着了!我先定位到尝试下载的地方,然后直接修改了其源码,让它遇到下载不成功后再多试试其它的 URL,就解决了问题:

xxx@ubuntu:~# easy_install -i http://c.pypi.python.org/simple -U lxml
Searching for lxml
Reading http://c.pypi.python.org/simple/lxml/
Reading http://codespeak.net/lxml
Reading http://lxml.de/
Best match: lxml 2.3.3
Downloading http://pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz
Can't download http://pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz: 403 Forbidden.
Best match: lxml 2.3.3
Downloading http://c.pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz#md5=a7825793c69d004f388ec6600bad7a6f
Processing lxml-2.3.3.tar.gz
Running lxml-2.3.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-0g1ftW/lxml-2.3.3/egg-dist-tmp-T6eTHt
Building lxml version 2.3.3.
Building with Cython 0.15.1.
Using build configuration of libxslt 1.1.26
Building against libxml2/libxslt in the following directory: /usr/lib
Adding lxml 2.3.3 to easy-install.pth fileInstalled /usr/local/lib/python2.6/dist-packages/lxml-2.3.3-py2.6-linux-x86_64.egg
Processing dependencies for lxml
Finished processing dependencies for lxml

补丁如下:

Index: package_index.py===================================================================--- package_index.py (revision 124)+++ package_index.py (working copy)@@ -445,10 +445,14 @@continueif dist in req and (dist.precedence<=SOURCE_DIST or not source):
-                    return dist
+                    self.info("Best match: %s", dist)
+                    try:
+                        return dist.clone(location=self.download(dist.location, tmpdir))
+                    except DistutilsError, e:
+                        self.info(str(e))
+                        continue-if force_scan:self.prescan()self.find_packages(requirement)
@@ -471,8 +475,7 @@(source and "a source distribution of " or ""),requirement,)
-        self.info("Best match: %s", dist)
-        return dist.clone(location=self.download(dist.location, tmpdir))
+        return distdef fetch(self, requirement, tmpdir, force_scan=False, source=False):

后来考虑到很多朋友即使公司没设黑名单,但也可能会有域名无法访问,打 patch 也麻烦,所以我就自己打包了一个 patch 后的 setuptools,大家可以在这里(http://abu-rpc.googlecode.com/files/setuptools-0.6c11-lai-patched.tar.gz)下载。

2012-4-27 更新:

当执行 python setup.py install 来安装程序库的时候,也可以在后面加上 -i 参数来指定 package index。

python setup.py install -i http://c.pypi.python.org/simple

2012-5-24 更新:

对于使用 -i 参数指定 package index 还说,还可以通过 easy_install 或 pip 的配置文件来简化。

使用pip的用户可以如下配置:在unix和macos,配置文件为: $HOME/.pip/pip.conf,在windows上,配置文件为:%HOME%\pip\pip.ini,需要在配置文件内加上

[global]
index-url=http://c.pypi.python.org/simple

使用easy_install的用户可以如下配置:在unix和macos,配置文件为:~/.pydistutils.cfg,在windows上,配置文件为:%HOME%\pydistutils.cfg,在配置文件中加上

[easy_install]
index-url=http://c.pypi.python.org/simple

打造百折不挠的 setuptools相关推荐

  1. 用python打造自己的SDK--使用setuptools打包安装

    有时候自己写了一个Python的包,想在不同的项目中使用,最简单粗暴的方法是直接复制到项目所在目录下,但是这样子每个项目下都得复制一次,能不能像pip安装的那样子直接放到系统的路径下呢? 方法一 简单 ...

  2. 转:为 setuptools 开路搭桥

    为 setuptools 开路搭桥 赖勇浩(http://laiyonghao.com) 在 这里,我们有些网站无法访问.其中对我影响比较大的一个就是安装某些 Python 模块的时候,easy_in ...

  3. 为 setuptools 开路搭桥

    赖勇浩(http://laiyonghao.com) 关键字:python, easy_install, setuptools, Bitvise Tunnelier, polipo, windows, ...

  4. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018...

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  5. 如何从stackoverflow的api 中获取是数据_教你拼多多如何选款、测款,打造出爆款。...

    一. 如何进行选款 拼多多选品是在拼多多商城开设店铺上架商品前的一个非常重要的环节,选品对与否对店铺业绩起着关键性作用,如果你选的商品好那么买的人自然也就多,商品不好自然自然就没人愿意买了.那么要如何 ...

  6. html 3d立体阴影效果图,CSS3打造带阴影的旋转3D图像

    CSS3打造带阴影的旋转3D图像 Sponsor CSS3可以实现很多创新好玩的交互效果,正如今天将和大家介绍的3D旋转图像,效果很漂亮,这个旋转图像的特别之处就是支持阴影旋转和兼容响应式网页设计,使 ...

  7. 基于EMQ X,打造AIoT物联网视频接入解决方案

    目录 1.背景 2.解决方案概述 方案1:平台层统一接入集成 方案2:平台层统一接入集成 方案3:边缘端统一集成 1.背景 近期看到EMQ 联合万为致力于打造 AI.IoT "一体化&quo ...

  8. tp3 普通模式url模式_《终身成长》:三个步骤打造成长型思维模式,普通人也可以成功...

    罗伯特很小是一个聪明的孩子,父母以他为傲,经常夸奖他,对他表达爱.结果他没有考上一个纽约第1名的幼儿园,父母就不像以前那样对他了,不会再经常表达爱,夸奖他,对他就越来越冷淡,他在父母眼里是一个失败者, ...

  9. Unity安卓游戏开发:打造7款2D 3D游戏 Unity Android Game Development : Build 7 2D 3D Games

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确) |大小:15.4 GB |时长:32h 55m Un ...

最新文章

  1. sklearn库安装_没有依赖库也能跑机器学习模型!推荐一个强大工具m2cgen
  2. 神策军丨优秀 Leader 养成记:多做简单又有效的事
  3. 史上最简单的 SpringCloud 教程 | 第十四篇: 服务注册(consul)
  4. SpringMVC+hibernate+mysql+EASYUI的登陆+CRUD
  5. 设计延迟加载的“单例设计模式”
  6. python中相对路径下文件的读取
  7. 我常用的find命令
  8. Linux宝库名人轶事栏目 | 我与中国开源软件二十年(三)
  9. linux下安装java
  10. C# Ftp创建文件夹
  11. 仓库管理软件中的账套是什么意思
  12. ITSS服务管理体系建立流程(四个阶段)附:广东软件行业协会ITSS评估
  13. 跳过Android6.0+权限的方法
  14. IIS6 伪静态 IIS文件类型映射配置方法 【图解】
  15. util-caleAge 计算年龄
  16. 还在为取快递而烦恼吗?智宇物联助力自动快递柜
  17. 杰理-BLE连接后打开经典蓝牙
  18. 利用trie Tree 解决查找连续子字符串的问题
  19. PINCTRL子系统
  20. 从友盟获取自己软件最新版本的版本名称

热门文章

  1. Mac更新catalina后显示剩余空间不足的解决方法,可清除空间清除方法
  2. 算法题之迷宫中任意位置走任意长度的所有路径查询【原创题,非官方题目】
  3. android重签名闪退,360加固保加固完之后重新签名的包运行闪退,求大神帮忙解答...
  4. 八猴模型html文件,使用Marmoset Toolbag八猴渲染器的Marmoset Viewer进行离线本地观察...
  5. Ubuntu的dpkg error
  6. 转入运维阶段的项目周报该怎么做?
  7. 一文告诉你渠道效果监测是什么
  8. TOOM品牌公关与舆情管理怎么做,品牌舆情监控工作制度是什么?
  9. vs code 出现html js css 注释不正常
  10. 简单的Web投票系统,通过数据库的内部验证实现防止刷票功能