10
10
. ScriptFunctions
11
11
Import Alien
12
12
13
+
13
14
getversion () {
15
+
14
16
local prog=$( echo " $1 " | sed ' s,\(.*\),\L\1,g' )
15
- local proginfo=$( $pip list | sed ' s,\(.*\),\L\1,g' | grep " ^${prog} " )
17
+ local proginfo=$( $pip list 2> /dev/null | sed ' s,\(.*\),\L\1,g' | grep " ^${prog} " )
16
18
if [ -z " $proginfo " ]
17
19
then exit 1
18
20
else echo " $proginfo " | cut -d\( -f2 | cut -d\) -f1
@@ -23,21 +25,28 @@ getinstallversion() {
23
25
prog=" $1 "
24
26
versions=($( python${python_major} - << EOF
25
27
import json
28
+ from packaging.version import Version
29
+
26
30
try:
27
31
from urllib2 import urlopen, Request
28
- except ImportError:
32
+ def load_json(res):
33
+ return json.load(res)
34
+
35
+ except ModuleNotFoundError:
29
36
from urllib.request import urlopen, Request
30
- from pkg_resources import parse_version
37
+ def load_json(res):
38
+ return json.loads('\n'.join([l.decode() for l in res.readlines()]))
39
+
31
40
def available_versions(prog):
32
41
try:
33
- url = "https://pypi.python.org/pypi/%s/json" %prog
34
- data = json.load (urlopen(Request(url)))
35
- versions = list(data["releases"].keys())
36
- # sort available versions newest to oldest
37
- versions.sort(key=parse_version, reverse=True)
38
- return versions
39
- except:
40
- return ''
42
+ url = "https://pypi.python.org/pypi/%s/json" %prog
43
+ data = load_json (urlopen(Request(url)))
44
+ versions = list(data["releases"].keys())
45
+ versions. sort(key=Version, reverse=True)
46
+ return versions
47
+
48
+ except Exception as e :
49
+ return []
41
50
print("\n".join(available_versions("$prog ")))
42
51
EOF
43
52
) )
@@ -97,9 +106,14 @@ prog="$2"
97
106
98
107
case " $command " in
99
108
--getversion)
100
- echo $( getversion " $2 " )
109
+ ver=$( getversion " $2 " )
110
+ [ $? -eq 0 ] && echo $ver || exit $? # propagate the error
101
111
;;
102
112
--getinstallversion)
113
+ [ -z " $( getversion ' packaging' ) " ] && {
114
+ echo " pip module 'packaging' (see PEP440) not found, installing it first" >&2
115
+ install packaging >&2 || exit 1
116
+ }
103
117
echo $( getinstallversion " $2 " " $3 " " $4 " )
104
118
;;
105
119
--greater-than)
@@ -112,7 +126,7 @@ case "$command" in
112
126
lower=" $3 "
113
127
upper=" $4 "
114
128
ver=$( getversion " $2 " )
115
- In_Version_Range " $lower " " $ver " " $upper "
129
+ In_Version_Range " $lower " " $ver " " $upper "
116
130
;;
117
131
--have-manager)
118
132
which pip${python_major} > /dev/null 2>&1 || exit 1
0 commit comments