관리-도구
편집 파일: constructors.cpython-38.pyc
U &?�f�G � @ s� d Z ddlZddlZddlZddlZddlmZ ddlmZm Z m Z mZmZm Z mZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd lmZmZ dd lmZ ddlmZ ddlm Z dd l!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z- dddgZ.e�/e0�Z1ej2�3� Z4e5e e5ee5 f d�dd�Z6ee5 ee5 d�dd�Z7eee5 ed�dd�Z8e5e ee5 e5ee5 f d�d d�Z9e5dd!�d"d#�Z:e5e5d$�d%d&�Z;ed'd(�G d)d*� d*��Z<e5e<d�d+d,�Z=dLdd-ddd-d-d-dd.�e5eee"e5f ee> e>ee e5 ee e5e e5 f e>e>e>ee e5ee5e e5 f f e"d/�d0d�Z?e5e>d1�d2d3�Z@e5e5ee5 d4�d5d6�ZAe5ee5 e<d7�d8d9�ZBdMdd-ddd-dd-dd:�e5eee5e"f ee> e>ee e5 ee e5e e5 f e>ee5 e>ee e5ee5e e5 f f e"d;�d<d�ZCdNe5ee" e>ee> e>e"d=�d>d?�ZDdOe e>ee> e>ee e5ee5e e5 f f e"d@�dAdB�ZEee"e"dC�dDdE�ZFe"e"dF�dGdH�ZGe"ee5 e"dI�dJdK�ZHdS )Pa~ Backing implementation for InstallRequirement's various constructors The idea here is that these formed a major chunk of InstallRequirement's size so, moving them and support code dedicated to them outside of that class helps creates for better understandability for the rest of the code. These are meant to be used elsewhere within pip to create instances of InstallRequirement. � N)� dataclass)� Collection�Dict�List�Optional�Set�Tuple�Union)�Marker)�InvalidRequirement�Requirement)� Specifier)�InstallationError)�PyPI�TestPyPI)�Link)�Wheel)�ParsedRequirement)�InstallRequirement)�is_archive_file)�is_installable_dir)�get_requirement)�path_to_url)�is_url�vcs�install_req_from_editable�install_req_from_line�parse_editable)�path�returnc C s6 t �d| �}d }|r*|�d�}|�d�}n| }||fS )Nz^(.+)(\[[^\]]+\])$� � )�re�match�group)r �m�extras�path_no_extras� r( �L/opt/hc_python/lib/python3.8/site-packages/pip/_internal/req/constructors.py� _strip_extras, s r* )r&