mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
"""Stuff that differs in different Python versions"""
|
|
|
|
import sys
|
|
import os
|
|
import shutil
|
|
|
|
__all__ = ['any', 'WindowsError', 'md5', 'copytree']
|
|
|
|
try:
|
|
WindowsError = WindowsError
|
|
except NameError:
|
|
class NeverUsedException(Exception):
|
|
"""this exception should never be raised"""
|
|
WindowsError = NeverUsedException
|
|
try:
|
|
from hashlib import md5
|
|
except ImportError:
|
|
import md5 as md5_module
|
|
md5 = md5_module.new
|
|
|
|
try:
|
|
from pkgutil import walk_packages
|
|
except ImportError:
|
|
# let's fall back as long as we can
|
|
from pip._pkgutil import walk_packages
|
|
|
|
try:
|
|
any = any
|
|
except NameError:
|
|
|
|
def any(seq):
|
|
for item in seq:
|
|
if item:
|
|
return True
|
|
return False
|
|
|
|
if sys.version_info >= (3,):
|
|
from io import StringIO
|
|
from functools import reduce
|
|
from urllib.error import URLError, HTTPError
|
|
from queue import Queue, Empty
|
|
from urllib.request import url2pathname
|
|
from urllib.request import urlretrieve
|
|
from email import message as emailmessage
|
|
import urllib.parse as urllib
|
|
import urllib.request as urllib2
|
|
import configparser as ConfigParser
|
|
import xmlrpc.client as xmlrpclib
|
|
import urllib.parse as urlparse
|
|
import http.client as httplib
|
|
def cmp(a, b):
|
|
return (a > b) - (a < b)
|
|
def b(s):
|
|
return s.encode('utf-8')
|
|
def u(s):
|
|
return s.decode('utf-8')
|
|
string_types = (str,)
|
|
raw_input = input
|
|
else:
|
|
from cStringIO import StringIO
|
|
from urllib2 import URLError, HTTPError
|
|
from Queue import Queue, Empty
|
|
from urllib import url2pathname, urlretrieve
|
|
from email import Message as emailmessage
|
|
import urllib
|
|
import urllib2
|
|
import urlparse
|
|
import ConfigParser
|
|
import xmlrpclib
|
|
import httplib
|
|
def b(s):
|
|
return s
|
|
def u(s):
|
|
return s
|
|
string_types = (basestring,)
|
|
reduce = reduce
|
|
cmp = cmp
|
|
raw_input = raw_input
|
|
|
|
try:
|
|
from email.parser import FeedParser
|
|
except ImportError:
|
|
# python lesser than 2.5
|
|
from email.FeedParser import FeedParser
|
|
|
|
from distutils.sysconfig import get_python_lib, get_python_version
|
|
|
|
def copytree(src, dst):
|
|
if sys.version_info < (2, 5):
|
|
before_last_dir = os.path.dirname(dst)
|
|
if not os.path.exists(before_last_dir):
|
|
os.makedirs(before_last_dir)
|
|
shutil.copytree(src, dst)
|
|
shutil.copymode(src, dst)
|
|
else:
|
|
shutil.copytree(src, dst)
|
|
|
|
|
|
def product(*args, **kwds):
|
|
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
|
|
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
|
|
pools = list(map(tuple, args)) * kwds.get('repeat', 1)
|
|
result = [[]]
|
|
for pool in pools:
|
|
result = [x+[y] for x in result for y in pool]
|
|
for prod in result:
|
|
yield tuple(prod)
|