Files
PowerToys/PythonHome/Lib/site-packages/pip/index.pyc

143 lines
33 KiB
Plaintext
Raw Normal View History

2014-07-09 18:15:23 +08:00
<03>
<00>Sc@s<>dZddlZddlZddlZddlZddlZddlmZddlm Z m
Z
m Z m Z ddl mZmZmZmZmZddlmZmZddlmZmZmZddlmZmZdd lmZmZm Z dd
l!m"Z"m#Z#m$Z$dd l%m&Z&d gZ'd Z(idgd6Z)d e*fd<00><00>YZ+de*fd<00><00>YZ,de*fd<00><00>YZ-de*fd<00><00>YZ.e.e <00>Z/d<00>Z0d<00>Z1dS(s!Routines related to PyPI, indexesi<73><69><EFBFBD><EFBFBD>N(tlogger(tInftnormalize_nametsplitextt is_prerelease(tDistributionNotFoundtBestVersionAlreadyInstalledtInstallationErrortInvalidWheelFilenametUnsupportedWheel(turlparset url2pathname(t
PipSessiont url_to_patht path_to_url(tWheelt wheel_ext(tsupported_tagstsupported_tags_noarcht get_platform(thtml5libtrequestst pkg_resources(tSSLErrort PackageFinderslast.pypi.python.orgthttpsthttpcBs<>eZdZeggeeedd<00>Zd<00>Zd<00>Zd<00>Z d<00>Z
d<00>Z d<00>Z d<00>Z ejd <00>Zejd
ej<00>Zejd <00>Zd <00>Zd <00>Zd<00>Zd<00>Zd<00>Zd<00>ZRS(s<>This finds packages.
This is meant to match easy_install's technique for looking for
packages, by reading pages and looking for appropriate links
c
Cs<>||_||_g|_t<00>|_t<00>|_||_td<00>|D<><00>|_td<00>|D<><00>|_ |j|j O_||_
t |_ t |_ ||_||_t |_| p<>t<00>|_dS(Ncss|]}t|<00>VqdS(N(R(t.0tn((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pys <genexpr>4scss|]}t|<00>VqdS(N(R(RR((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pys <genexpr>8s(t
find_linkst
index_urlstdependency_linkst PageCachetcachetsett logged_linkst use_wheeltallow_externaltallow_unverifiedtallow_all_externaltFalsetneed_warn_externaltneed_warn_unverifiedtallow_all_prereleasestprocess_dependency_linkst_have_warned_dependency_linksR tsession(
tselfRRR$R%R&R'R+R,R.((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__init__&s"            cCsE|jrA|js.tjdd<00>t|_n|jj|<00>ndS(Ns1.6spDependency Links processing has been deprecated with an accelerated time schedule and will be removed in pip 1.6(R,R-Rt
deprecatedtTrueRtextend(R/tlinks((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytadd_dependency_linksSs   c sGg<00>g<00><00><00>fd<00>}x|D]}tjj|<00>}|jd<00>}||jk}|sg|r,|rv|}n t|<00>}|r<>tjj|<00>r<>tjj|<00>}xztj|<00>D]}|tjj ||<00><00>q<>Wq9|r
tjj|<00>r
<01>j
|<00>q9tjj |<00>r9||<00>q9q%<00>j
|<00>q%W<><00>fS(st
Sort locations into "files" (archives) and "urls", and return
a pair of lists (files,urls)
csLt|<00>}tj|dt<00>ddkr;<00>j|<00>n <00>j|<00>dS(Ntstrictis text/html(Rt mimetypest
guess_typeR(tappend(tpathturl(tfilesturls(s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt sort_pathks sfile:( tosR:texistst
startswithRR tisdirtrealpathtlistdirtjoinR9tisfile( R/t locationsR>R;t is_local_patht is_file_urlt is_find_linkR:titem((R<R=s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt_sort_locationsbs*     cCs<>|\}}}|jr<>tt<00>}|tkr9d}nW|jtkr<>t|j<00>}|j<00>syt d|j<16><00>n|j
<00> }n| }||fS|SdS(sL
Function used to generate link sort key for link tuples.
The greater the return value, the more preferred it is.
If not finding wheels, then sorted by version only.
If finding wheels, then the sort order is by version, then:
1. existing installs
2. wheels ordered via Wheel.support_index_min()
3. source archives
Note: it was considered to embed this logic into the Link
comparison operators, but then different sdist links
with the same version, would have to be considered equal
isB%s is not a supported wheel for this platform. It can't be sorted.N( R$tlenRtINSTALLED_VERSIONtextRRtfilenamet supportedR tsupport_index_min(R/t
link_tupletparsed_versiontlinkt_t support_numtpritwheel((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt_link_sort_key<65>s      
cCst|d|jdt<00>S(s<>
Bring the latest version (and wheels) to the front, but maintain the existing ordering as secondary.
See the docstring for `_link_sort_key` for details.
This function is isolated for easier unit testing.
tkeytreverse(tsortedRZR2(R/tapplicable_versions((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt_sort_versions<6E>sc
s<><00>fd<00>}|j<00>d}|jr<>t||jd<19>dt<00>}|j||<00>}|dkr<>|jt|jddt<00><01>|<00>p<>|j<00>q<>n<00>dk r<>g|jD]}||<00>^q<>|j}nt|j<00>}xH|j D]=}<00>dk r<>|dk r<>t
j |j |<00>g|}q<>q<>W|j |<00>\} }
|j |j<00>\} } | j| <00>g|
D]}t|dt<00>^qn}|jg| D]}t|<00>^q<><01>tjd|<16>x<>|D]<5D>} tjd| <16>tjt| <00><00>}|jtkr<>t|j}t|<00>dkrT| |j|d|jf}tjd|<16>q<>t|<00>dkr<>| |jdj |<00>|jf}tjd |<16>q<>| |jf}tjd
|<16>q<>q<>Wg}|j|jg|jD]}t|d dt<00>^q<>|jj<00><00><00>g}xy|j||<00>D]e}tjd |j <16>tjd 7_z)|j|j|j|jj<00><00><00>Wdtjd 8_Xq(Wt|jg|jD]}t|<00>^q<>|jj<00><00><00>}|rtjddj g|D]\}}}|j ^q<><03><16>nt|jg| D]}t|<00>^q |jj<00><00><00>}| r<>| r<>| r<>| r<>tj d|<16>|j!r<>tjd|j<16>n|j"r<>tjd|j<16>nt#d|<16><00>ng}|j$dk r|j$j%t&|j$j'fg}n|rX|j(dt<00>tjddj g|D]\}}}t)|j <00>^q,<05><16>n|||||}g}x<>|D]<5D>\}}}||j*kr<>tjd||dj g|j*j+D]}dj |<00>^q<><05>f<16>q{nKt,|<00>r/|j-p<>|j. r/|t&k r/tjd||f<16>q{q/n|j/|||f<00>q{W|j0|<00>}t1g|D]!\}}}|t&krb|^qb<06>}| r<>|r<>|ddt&kr<>tjd|j$j'<16>n%tjd|j$j'|dd f<16>dS|s~tj d|dj g|D]\}}}|^q<07>f<16>|j!rKtjd<00>n|j"rktjd|j<16>nt#d|<16><00>n|ddt&kr<>tjd|j$j'dj g|dD]\}}}|^q<><07>p<>df<16>t2<00>nt|<00>dkr@tjd |dd dj g|D]\}}}|^q<08>f<16>n|dd}|j3dk r~|j3 r~tjd!|j<16>n|j4dk r<>|j4 r<>tjd"|j<16>n|j5r<>tj6d#d$|j<16>n|S(%Ncs2tj|<00><00>}|jd<00>s.|d}n|S(Nt/(t posixpathREtendswith(R;tloc(turl_name(s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytmkurl_pypi_url<72>s ittrusteds#URLs to search for versions for %s:s* %sisS%s uses an insecure transport scheme (%s). Consider using %s if %s has it availables, sc%s uses an insecure transport scheme (%s). Consider using one of %s if %s has any of them availables*%s uses an insecure transport scheme (%s).s-fsAnalyzing links from page %sisdependency_links found: %ss<Could not find any downloads that satisfy the requirement %ssMSome externally hosted files were ignored (use --allow-external %s to allow).sWSome insecure and unverifiable files were ignored (use --allow-unverified %s to allow).s$No distributions at all found for %sR\sLocal files found: %ss-Ignoring link %s, version %s doesn't match %st,tsCIgnoring link %s, version %s is a pre-release (use --pre to allow).sLExisting installed version (%s) is most up-to-date and satisfies requirementsUExisting installed version (%s) satisfies requirement (most up-to-date version is %s)sNCould not find a version that satisfies the requirement %s (from versions: %s)sJSome externally hosted files were ignored (use --allow-external to allow).s,No distributions matching the version for %ss=Installed version (%s) is most up-to-date (past versions: %s)tnones)Using version %s (newest of versions: %s)s2%s an externally hosted file and may be unreliables,%s is potentially insecure and unverifiable.s1.7sa%s discovered using a deprecated method of parsing, in the future it will no longer be discovered(7RdtNoneRtLinkR2t _get_paget_find_url_nameRtlisttabsolute_versionsRaRER;RLRR3RtdebugR
tstrtschemetINSECURE_SCHEMESRMtnetloctwarnt_package_versionstnametlowert
_get_pagestindentR4tinfotfatalR)R*Rt satisfied_byRTRNtversiontsortR treqtspecsRR+t prereleasesR9R_tboolRtinternalt
verifiablet_deprecated_regexR1(R/R<>tupgradeRetmain_index_urltpageR;RGR~tfile_locationst url_locationst _flocationst _ulocationstlocationtparsedtsecure_schemestctxtfound_versionst page_versionstdependency_versionsRUt file_versionstinstalled_versiont all_versionsR^RTtstexisting_applicabletselected_version((Rds@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytfind_requirement<6E>s<>
  7 )# %&         ;) 4< 1    !B <  4    3    C  >
 
  cCs<>|jjd<00>s$|jd7_n|j||<00>}|dkrWtjd|<16>dSt|j<00>}xY|jD]N}t j
|j j d<00><00>}|t|<00>krptj d||f<16>|SqpWdS(s<>Finds the true URL name of a package, when the given name isn't quite correct.
This is usually used to implement case-insensitivity.R`sCannot fetch index base URL %sNs!Real name of requirement %s is %s(R;RbRlRjRR|RRdR4RatbasenameR:trstriptnotify(R/t index_urlRdR<>R<>t norm_nameRUtbase((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRmbs c cs7t|<00>}t<00>}x|r2|jd<00>}||kr?qn|j|<00>|j||<00>}|dkrpqn|Vx<>|j<00>D]<5D>}t|j<00>j <00>}||j
kr<>|j r<>t |_ tjd|<16>q<>n|jdk r|j r||jkrtjd|<16>t |_q<>n|j|<00>q<>WqWdS(s<>
Yields (page, page_url) from the given locations, skipping
locations that have errors, and adding download/homepage links
is@Not searching %s for files because external urls are disallowed.s_Not searching %s for urls, it is an untrusted link and cannot produce safe or verifiable files.N(RnR"tpoptaddRlRjt rel_linksRRwRxR%R'R2R)RRpRfR&R*R9( R/RGR<>t all_locationstseenR<6E>R<>RUt
normalized((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRyus6      
  
  s #egg=([^&]*)s([a-z0-9_.]+)-([a-z0-9_.-]+)s-py([123]\.?[0-9]?)$cCsqgg}}t<00>}xP|D]H}||kr|j|<00>|jrU|j|<00>qe|j|<00>qqW||S(sgReturns elements of links in order, non-egg links first, egg links second, while eliminating duplicates(R"R<>t egg_fragmentR9(R/R4teggstno_eggsR<73>RU((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt _sort_links<6B>s      ccs@x9|j|<00>D](}x|j||<00>D] }|Vq)WqWdS(N(R<>t_link_package_versions(R/R4t search_nameRUtv((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRv<00>scCsd}|jr|tfS|S(Ns.tar.gzs.tar.bz2s.tars.tgzs.zip(s.tar.gzs.tar.bz2s.tars.tgzs.zip(R$R(R/t
extensions((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt_known_extensions<6E>s  c Cs<>t<00>}d}|jr$|j}nD|j<00>\}}|ss||jkrotjd|<16>|jj|<00>ngS|jd<00>r<>|d }d|}n||j <00>kr<>||jkr<>tjd||f<16>|jj|<00>ngSd|j
kr:|dkr:||jkr6tjd|<16>|jj|<00>ngS|t krhyt |j <00>}Wn#tk
r~tjd|<16>gSX|jj<00>|j<00>kr<>tjd ||f<16>gS|j<00>s<>tjd
|<16>gSt|d d<00>}|jd <00> r\|jd <00> r\|dk r\tj|j<00>jjd<00>r\|jdt<00>s\tjd|<16>gSn|j}n|s<>|j|||<00>}n|dkr<>tjd ||f<16>gS|jdk r |j r t|<00>j<00>|jkr |j r tjd|<16>t|_gS|j dk r[|j r[t|<00>j<00>|j!kr[tjd|<16>t|_"gS|j#j$|<00>} | r<>|| j%<00> }| j&d<00>}
|
t'jd kr<>tjd|<16>gSntjd||f<16>t(j)|<00>||fgS(s<>
Return an iterable of triples (pkg_resources_version_key,
link, python_version) that can be extracted from the given
link.
Meant to be overridden by subclasses, not called by clients.
sSkipping link %s; not a files.tari<72><69><EFBFBD><EFBFBD>s,Skipping link %s; unknown archive format: %stmacosx10s.zipsSkipping link %s; macosx10 ones1Skipping %s because the wheel filename is invalids-Skipping link %s; wrong project name (not %s)s9Skipping %s because it is not compatible with this Pythont
comes_fromtwintmacosxspypi.python.orgttagssOSkipping %s because it is a pypi-hosted binary Wheel on an unsupported platforms,Skipping %s because it is externally hosted.s<Skipping %s because it is an insecure and unverifiable file.iis/Skipping %s because Python version is incorrectsFound link %s, version: %sN(*RRjR<>RR#RRpR<>RbR<>R:RRRPRRwRxRQtgetattrRAR
R;RtRR~t_egg_info_matchesR<73>RR%R'R2R)R<>R&R*t_py_version_retsearchtstarttgrouptsysRt parse_version( R/RUR<>tplatformR~tegg_infoRORYR<>tmatcht
py_version((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79><00>s<>   
        

 
    cCs<>|jj|<00>}|s-tjd|<16>dS|jd<00>j<00>}|jdd<00>}|j<00>d}|j|<00>r<>|jd<00>t |<00>SdSdS(Ns%Could not parse version from link: %siRVt-(
t _egg_info_reR<65>RRpRjR<>RxtreplaceRARM(R/R<>R<>RUR<>Rwtlook_for((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>&scCs"tj||d|jd|j<00>S(NR!R.(tHTMLPagetget_pageR!R.(R/RUR<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRl5s N(t__name__t
__module__t__doc__R2R(RjR0R5RLRZR_R<>RmRytretcompilet_egg_fragment_retIR<49>R<>R<>RvR<>R<>R<>Rl(((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRs( *  (   <09>  )   l R cBsVeZdZdZd<00>Zd<00>Zd<00>Zd<00>Zed<00>Z d<00>Z
d<00>Z RS( sCache of HTML pagesicCsi|_i|_i|_dS(N(t _failurest_pagest _archives(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR0As  cCs|jj|d<00>|jkS(Ni(R<>tgett failure_limit(R/R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyttoo_many_failuresFscCs|jj|<00>S(N(R<>R<>(R/R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>IscCs|jj|t<00>S(N(R<>R<>R((R/R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt
is_archiveLscCs||j|<dS(N(R<>(R/R;tvalue((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytset_is_archiveOscCs$|jj|d<00>||j|<dS(Ni(R<>R<>(R/R;tlevel((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytadd_page_failureRscCs"x|D]}||j|<qWdS(N(R<>(R/R=R<>R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytadd_pageUs ( R<>R<>R<>R<>R0R<>R<>R<>R2R<>R<>R<>(((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR <s      R<>cBseZdZejdej<00>Zejdej<00>ZejdejejB<>Z ddd<00>Z d<00>Z e dedd<00><00>Zedddd<00><00>Zedd <00><00>Zed
<00><00>Zed <00><00>Zed <00><00>Zd <00>Zdd<00>Zd<00>Zejdej<00>Zd<00>ZRS(s'Represents one page, along with its URLs<th>\s*home\s*pages<th>\s*download\s+urls(href=(?:"([^"]*)"|'([^']*)'|([^>\s\n]*))cCsC||_tj|jdt<00>|_||_||_||_dS(NtnamespaceHTMLElements(tcontentRtparseR(R<>R;theadersRf(R/R<>R;R<>Rf((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR0bs
   cCs|jS(N(R;(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__str__isc Cs%|dkrt<00>}n|j}|jdd<00>d}|j|<00>rJdSddlm}xT|jD]I}|j<00>j |<00>rd|t
|<00>dkrdt j dt <00><16>dSqdW|dk r<>|j|<00>} | dk r<>| Sny|r<>|dk r
|j|<00>r
dSn|j}
x<>dd d
d d gD]}} |
j| <00>r)|j|d |<00>} | j<00>j d<00>rlPq<50>t j d|| f<16>|dk r<>|j|<00>ndSq)q)Wnt j d|<16>tj|<00>\}} }}}}|dkrEtjjt|<00><00>rE|jd<00>s|d7}ntj|d<00>}t j d|<16>n|j|didd6<>}|j<00>|jjdd<00>} | j<00>j d<00>s<>t j d|| f<16>|dk r<>|j|<00>ndS||j|j|jd|j<00>} Wntj k
rI}|j!j"dkrdnd}|j#||||d|d|<00>n<>tj$k
r~}|j#||d||d|<00>n<>tj%k
r<>|j#||d|d|<00>ntt&k
r<>}d |}|j#||||d|ddd!t j'<00>n-X|dk r|j(||jg| <00>n| SdS("Nt#iii<><69><EFBFBD><EFBFBD>(t
VcsSupports+:s&Cannot look at %(scheme)s URL %(link)ss.tars.tar.gzs.tar.bz2s.tgzs.zipR.s text/htmls,Skipping page %s because of Content-Type: %ssGetting page %stfileR`s
index.htmls# file: URL is directory, getting %sR<73>tAccepts Content-TypetunknownRfi<>iR!R<>sconnection error: %ss timed outs6There was a problem confirming the ssl certificate: %stmeth()RjR R;tsplitR<74>tpip.vcsR<73>tschemesRxRARMRRptlocalsR<73>R<>RPRbt_get_content_typeR<65>R
R?R:RBR turljoinR<6E>traise_for_statusR<73>ttextRfRt HTTPErrortresponset status_codet _handle_failtConnectionErrortTimeoutRR<>R<>(tclsRUR<>R!t skip_archivesR.R;R<>RrtinstRPtbad_extt content_typeRtR:tparamstquerytfragmenttresptexcR<63>treason((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>ls<>   +       !$ 
  (%
 icCsb|dkrtj}n|d||<00>|d|j|f<16>|dk r^|j||<00>ndS(NsCould not fetch URL %s: %ss7Will skip URL %s when looking for download links for %s(RjRR{R;R<>(R<>RUR<>R;R!R<>R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79><00>s   cCsx|dkrt<00>}ntj|<00>\}}}}}|d krFdS|j|dt<00>}|j<00>|jjdd<00>S(
s;Get the Content-Type of the given url, using a HEAD requestRRtftptftpsRhtallow_redirectss Content-TypeN(shttpshttpssftpR( RjR R
turlsplittheadR2R<>R<>R<>(R;R.RrRtR:R<>R<>R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79><00>s   
cCs<>t|d<00>s<>d}g|jjd<00>D]*}|jdd<00>j<00>dkr(|^q(}|r<>y t|djdd<00><00>}Wq<57>ttfk
r<>d}q<>Xn||_ n|j S(Nt _api_versions.//metaRwRhs api-versioniR<>(
thasattrRjR<>tfindallR<6C>Rxtintt TypeErrort
ValueErrorR(R/Rtxtmetas((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt api_version<6F>s*   cCsgt|d<00>s`|jjd<00>}|dk rQ|jd<00>rQ|jd<00>|_q`|j|_n|jS(Nt _base_urls.//basethref(RR<>tfindRjR<>R R;(R/R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytbase_url<72>s ccs<>x<>|jjd<00>D]<5D>}|jd<00>r|jd<00>}|jtj|j|<00><00>}d}|jr<>|jdkr<>t |jd<00>o<>d|jd<00>j
<00>k<00>}nt ||d|<00>VqqWdS(sYields all links in the pages.//aRitrelR<6C>N( R<>RR<>t
clean_linkR
R<>RRjR R<>R<>Rk(R/tanchorRR;R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR4<00>s!ccs<x|j<00>D] }|Vq Wx|j<00>D] }|Vq)WdS(N(texplicit_rel_linkstscraped_rel_links(R/R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>s thomepagetdownloadccs<>t|<00>}x<>|jjd<00>D]<5D>}|jd<00>r|jd<00>rt|jd<00>j<00><00>}||@r<>|jd<00>}|jtj|j|<00><00>}t ||dt
<00>Vq<>qqWdS(s)Yields all links with the given relationss.//aRRRfN( R"R<>RR<>R<>RR
R<>RRkR((R/trelsRt
found_relsRR;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRs 
ccs<>x<>|j|jfD]<5D>}|j|j<00>}|s7qn|jj|jd|j<00><00>}|sdqn|jd<00>p<>|jd<00>p<>|jd<00>}|s<>qn|jtj |j
|<00><00>}t ||dt dt <00>VqWdS(NtposiiiRfR<>(t _homepage_ret _download_reR<65>R<>t_href_retendR<64>RR
R<>RRkR(R2(R/tregexR<78>t
href_matchR;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR&s!-s[^a-z0-9$&+,/:;=?@.#%_\\|-]cCs|jjd<00>|<00>S(s<>Makes sure a link is fully encoded. That is, if a ' ' shows up in
the link, it will be rewritten to %20 (while not over-quoting
% or other characters).cSsdt|jd<00><00>S(Ns%%%2xi(tordR<64>(R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt<lambda><s(t _clean_retsub(R/R;((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR7s N(Rsdownload(R<>R<>R<>R<>R<>R<>RRtSRRjR0R<>t classmethodR2R<>t staticmethodR<64>R<>tpropertyR RR4R<>RRR#R(((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>Zs( [ 
   RkcBs+eZddded<00>Zd<00>Zd<00>Zd<00>Zd<00>Zd<00>Z d<00>Z
d<00>Z d<00>Z d <00>Z ed
<00><00>Zed <00><00>Zed <00><00>Zd <00>Zed<00><00>Zed<00><00>Zejd<00>Zed<00><00>Zejd<00>Zed<00><00>Zed<00><00>Zed<00><00>Zed<00><00>ZRS(cCs1||_||_||_||_||_dS(N(R;R<>R<>RfR<>(R/R;R<>R<>RfR<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR0As
    cCs.|jrd|j|jfSt|j<00>SdS(Ns %s (from %s)(R<>R;Rq(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79>Is cCsd|S(Ns <Link %s>((R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__repr__OscCs|j|jkS(N(R;(R/tother((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__eq__RscCs|j|jkS(N(R;(R/R*((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__ne__UscCs|j|jkS(N(R;(R/R*((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__lt__XscCs|j|jkS(N(R;(R/R*((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__le__[scCs|j|jkS(N(R;(R/R*((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__gt__^scCs|j|jkS(N(R;(R/R*((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__ge__ascCs t|j<00>S(N(thashR;(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt__hash__dscCs\tj|j<00>\}}}}}tj|jd<00><00>p<|}|sXtd|j<16><00>|S(NR`sURL %r produced no filename(R
RR;RaR<>R<>tAssertionError(R/RVRtR:Rw((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRPgs!cCstj|j<00>dS(Ni(R
RR;(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRrnscCstj|j<00>dS(Ni(R
RR;(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR:rscCsttj|jjd<00><00><00>S(NR`(RRaR<>R:R<>(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRvscCs|j<00>dS(Ni(R(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyROyscCs=tj|j<00>\}}}}}tj||||df<00>S(N(R
RR;t
urlunsplitRj(R/RrRtR:R<>R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyturl_without_fragment}s!s #egg=([^&]*)cCs,|jj|j<00>}|sdS|jd<00>S(Ni(R<>R<>R;RjR<>(R/R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79><00>ss2(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)cCs,|jj|j<00>}|r(|jd<00>SdS(Ni(t_hash_reR<65>R;R<>Rj(R/R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR1<00>s cCs,|jj|j<00>}|r(|jd<00>SdS(Ni(R6R<>R;R<>Rj(R/R<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt hash_name<6D>s cCs0tj|jjdd<00>djdd<00>d<19>S(NR<4E>iit?(RaR<>R;R<>(R/((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytshow_url<72>scCs<>|jpt|jdd<00>}|dk r<>|r<>y%t|jdd<00>}t|<00>}Wnttfk
rtd}nX|dks<>|dkr<>dS|jr<>tSt Sn|dk r<>t SdS(s<>
Returns True if this link can be verified after download, False if it
cannot, and None if we cannot determine.
RfR iN(
RfR<>R<>RjRR RR1R2R((R/RfR ((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR<79><00>s
  N(R<>R<>RjR(R0R<>R)R+R,R-R.R/R0R2R(RPRrR:RROR5R<>R<>R<>R<>R6R1R7R9R<>(((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyRk?s0            cCs;t|<00>}|j}|s1t|j<00>d}nt|<00>S(sPGet a requirement from the URL, if possible. This looks for #egg
in the URLi(RkR<>RRPtpackage_to_requirement(R;RUR<>((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pytget_requirement_from_url<72>s
  cCsatjd|<00>}|r9|jd<00>}|jd<00>}n |}d}|rYd||fS|SdS(s)Translate a name like Foo-1.2 to Foo==1.3s^(.*?)-(dev|\d.*)iiRhs%s==%sN(R<>R<>R<>(t package_nameR<65>RwR~((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyR:<00>s(2R<>R<>R?R<>R7Ratpip.logRtpip.utilRRRRtpip.exceptionsRRRRR tpip.backwardcompatR
R t pip.downloadR R Rt pip.wheelRRtpip.pep425tagsRRRt pip._vendorRRRtpip._vendor.requests.exceptionsRt__all__tDEFAULT_MIRROR_HOSTNAMERstobjectRR R<>RkRNR;R:(((s@c:\Users\lifqian\Desktop\Python27\lib\site-packages\pip\index.pyt<module>s6     "(  <16><00><16><16>