这篇文章主要介绍了python中pip安装非pypi官网第三方库的方法,pip最新的版本(1.5以上的版本), 出于安全的考虑,pip不允许安装非pypi的url,本文就给出两种解决方法,需要的朋友可以参考下
1 S7 D: k7 e& j8 } e 在python中安装非自带python模块,有三种方式:
. n' p% O' G, q( _2 A! z 1.easy_install
% l1 k. k, c" `! C2 _- v 2.pip- M6 R/ }* m0 v F6 `
3.下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的目录后执行python setup.py install命令6 b$ A* ?; ~* c* `: C
本文主要针对pip安装时可能会碰到的一种情况,及解决办法:
+ H' | A0 E: {8 A+ @ 假如我要安装pylint模块,该模块非python自带模块,用import肯定不能导入,需要额外安装5 ?; [* z, ]! j
代码如下:
. }. o# o0 i! ~) ` >>> import pylint
; |, G8 s8 { B+ p& J3 J. e; q traceback (most recent call last):
) e3 P7 v/ Q1 e! u6 e0 Q, A- F file "", line 1, in
9 i, Z9 L3 S1 d$ L% ]" x* l: ~6 V! g importerror: no module named pylint8 | u+ v. R9 i! ]' o7 F; Z
【现象】
& z. P6 q4 t9 O0 O 执行pip install 命令,报错如下:
- G. N( z1 r- t; r! a 代码如下:
1 p/ N+ s: ?0 ^' Y; |$ c# \ d:\>pip install pylint --allow-external pylint
9 n7 J; t% I1 y downloading/unpacking pylint4 M" U0 ~8 X) o, e. K( A# x
requirement already satisfied (use --upgrade to upgrade): six in c:\python27\lib\site-packages\six-1+ ^5 n+ ^; W# W) S' V+ ]
.8.0-py2.7.egg (from pylint)
/ S8 c% c8 ?- a9 E" O+ _ downloading/unpacking astroid>=1.3.6 (from pylint)
% i& {% p6 b3 G real name of requirement astroid is astroid
* x2 p8 u9 u8 @* G& p# p could not find any downloads that satisfy the requirement astroid>=1.3.6 (from pylint). R2 Z+ y- B1 F& t
some insecure and unverifiable files were ignored (use --allow-unverified astroid to allow).
k! E5 y; v2 _ \1 \! H& Z$ R cleaning up...
2 w& O, Z+ f5 K$ @4 q0 I no distributions at all found for astroid>=1.3.6 (from pylint)
$ ~/ W7 V6 u$ C storing debug log for failure in c:\users\aaa\pip\pip.log
' y5 O1 E$ Y1 v& |) L/ e 【分析】
8 f! p2 c4 w1 z. G 在perl中安装新模块,一般可以用ppm图形化工具,也可以用cpan来安装,比如说: cpan>install test::class, 非常方便,不会碰到这种情况,这种情况主要是因为pip版本问题: pip最新的版本(1.5以上的版本), 出于安全的考
* B! _' _# [" ]2 s 虑,pip不允许安装非pypi的url,因为该安装文件实际上来自pylint.org,因而导致上面的错误!/ e! ^1 P7 o/ @: y
note:
: a. M$ A8 j, E, [ 1. 可以在官方changelog里面查看更改的信息) A: x6 b" o* m5 g" R% k
2. 可以用pip --version来查看pip的版本信息 m8 E" }/ w* y
代码如下:8 k2 J7 C9 g* b) U# O& a
c:\>pip --version, D- p0 E$ t6 c" O, a4 X' O
pip 1.5.6 from c:\python27\lib\site-packages (python 2.7)% y/ L6 X& E7 p$ Z
【办法】/ }# {* w, c3 Q' n! M
针对上面的情况,既然这个问题是因为pip版本的原因,可以改用pip低一点的版本
o6 H1 u# w% w r# } 方法一: 用pip 1.4版本,再执行pip install pylint命令来安装# L9 L. q% Y4 x8 g2 u! `* Y {
方法二: 执行命令时,加上--allow-all-external, --allow-unverified及依赖包版本(astroid==1.3.6)1 I. N6 P! I" U% s+ s
代码如下:3 j5 {; q4 N+ R. p. `- Q7 f- f
pip install pylint --allow-all-external pylint astroid==1.3.6 --allow-unverified pylint
$ d6 x% i% N4 y$ B note:6 Y) S) a ]5 B' F* N' u
1. --allow-all-external # 允许所有外部地址的标签,只有打上该标签pip方可下载外部地址模块# E$ P! m- V: n# E1 P
2. --allow-unverified # pip没有办法校验外部模块的有效性,所以必须同时打上该标签0 N6 ^0 R2 L9 _: R/ ]
3. astroid==1.3.6 # 依赖包必须要添加上,并赋予其版本号,pip方能从列表下载
+ x/ C- N, \. r; {# v7 X0 U9 Y9 I 方法三: 在当前目录下,新增requirements.txt,内容如下: k! B" N# d+ O/ }( l/ ?7 e+ ?
代码如下:% N, n7 ]$ l! j$ t& r% V6 j1 L
# requirements.txt
, c5 v! n8 c; { --allow-all-external pylint
3 d. [# u" T1 |& ` t& \ --allow-unverified pylint4 m) k$ S* P8 P* S- s: S7 E
pylint
/ f: e- ]3 _6 B: ^2 x8 N3 ` --allow-all-external astroid==1.3.6; F- ]0 P5 O/ P4 c; q% ^1 c
再执行: pip install -r requirements.txt
+ \6 }) F- e. G8 a5 l6 ^0 Z 【结论】
0 S, D3 U* M9 \+ _- { 1. pip这个设计不够友好,使用也很不方便,远不如perl中的ppm,期待python中也有这么个工具。* m7 ]5 x# ^" k- m
2. 如果碰到这种错,导致不能安装模块的话: 直接下载压缩包安装好了。 >>>下载包地址<<<$ C& k/ l! b- `1 A
3. 执行pip -h命令查看更新pip相关的帮助信息7 Y% n& B5 [6 I4 d) r- N1 o6 H! z; y
代码如下:
1 _. J% E+ }2 A7 A' _# c8 p usage:, a; C g/ G6 M( I
pip [options]
3 m* m7 z2 _$ o+ w) S3 F commands:
4 j! K1 g6 x' R# ~ install install packages.
; C8 D) w: I3 |2 t- V6 Z1 B, P uninstall uninstall packages.
2 |8 T8 @ g9 m' O freeze output installed packages in requirements format.- m: ^, s- A. c w) k9 a3 M* [2 m
list list installed packages.' E, z: H- M/ [7 w, U
show show information about installed packages.
, c X( C. M6 G4 a5 F( K search search pypi for packages.) o3 h8 R* F' I, U. u
wheel build wheels from your requirements." Q3 q; v$ L2 C' X7 m+ z4 p
zip deprecated. zip individual packages.- m2 D j8 {1 h& A
unzip deprecated. unzip individual packages." S+ N% Y6 o; r/ T
bundle deprecated. create pybundles.
" I9 d! R t% w e( J help show help for commands.9 ]+ h: h: X* z* h- U
general options:
' j+ U5 e( E. y" w -h, --help show help.( r* \( w7 {8 y1 a: W& b
-v, --verbose give more output. option is additive, and can be used up to 3 times.
9 b, A1 k6 T/ Y' D/ ]( d -v, --version show version and exit.) j6 _' o' g& t
-q, --quiet give less output.% e9 i& s+ z! S* }; S* M
--log-filepath to a verbose non-appending log, that only logs failures. this log is active by default at pip.log.
- M6 J" {) v. Y! S7 F, l --logpath to a verbose appending log. this log is inactive by default.3 z5 M) x! d& Y- r
--proxyspecify a proxy in the form [user:passwd@]proxy.server:port.
0 f$ o2 s o5 Z6 k$ Y --timeout set the socket timeout (default 15 seconds).0 M) N/ Q0 n3 d, F% a
--exists-action default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
# s, |" p) D% h) f. g7 W3 c5 P1 N --certpath to alternate ca bundle.
# C- L# G6 ^0 m! [6 u( j更多技术文章信息请查看: 技术文章 |
|