@functools.lru_cache(maxsize=None) def _get_supported_tags(): # We calculate the supported tags only once, otherwise calling # this method on thousands of wheels takes seconds instead of # milliseconds. return {(t.interpreter, t.abi, t.platform) for t in sys_tags()}
def unpack(src_dir, dst_dir): """Move everything under `src_dir` to `dst_dir`, and delete the former.""" for dirpath, dirnames, filenames in os.walk(src_dir):
subdir = os.path.relpath(dirpath, src_dir) for f in filenames:
src = os.path.join(dirpath, f)
dst = os.path.join(dst_dir, subdir, f)
os.renames(src, dst) for n, d in reversed(list(enumerate(dirnames))):
src = os.path.join(dirpath, d)
dst = os.path.join(dst_dir, subdir, d) ifnot os.path.exists(dst): # Directory does not exist in destination, # rename it and prune it from os.walk list.
os.renames(src, dst) del dirnames[n] # Cleanup. for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True): assertnot filenames
os.rmdir(dirpath)
@contextlib.contextmanager def disable_info_traces(): """
Temporarily disable info traces. """ from distutils import log
class Wheel: def __init__(self, filename):
match = WHEEL_NAME(os.path.basename(filename)) if match isNone: raise ValueError('invalid wheel name: %r' % filename)
self.filename = filename for k, v in match.groupdict().items():
setattr(self, k, v)
def tags(self): """List tags (py_version, abi, platform) supported by this wheel.""" return itertools.product(
self.py_version.split('.'),
self.abi.split('.'),
self.platform.split('.'),
)
def is_compatible(self): """Is the wheel compatible with the current platform?""" return next((Truefor t in self.tags() if t in _get_supported_tags()), False)
def get_dist_info(self, zf): # find the correct name of the .dist-info dir in the wheel file for member in zf.namelist():
dirname = posixpath.dirname(member) if dirname.endswith('.dist-info') and canonicalize_name(dirname).startswith(
canonicalize_name(self.project_name)
): return dirname raise ValueError("unsupported wheel format. .dist-info not found")
def install_as_egg(self, destination_eggdir): """Install wheel as an egg directory.""" with zipfile.ZipFile(self.filename) as zf:
self._install_as_egg(destination_eggdir, zf)
def get_metadata(name): with zf.open(posixpath.join(dist_info, name)) as fp:
value = fp.read().decode('utf-8') return email.parser.Parser().parsestr(value)
# Note: Evaluate and strip markers now, # as it's difficult to convert back from the syntax: # foobar; "linux" in sys_platform and extra == 'test' def raw_req(req):
req.marker = None return str(req)
install_requires = list(map(raw_req, dist.requires()))
extras_require = {
extra: [
req for req in map(raw_req, dist.requires((extra,))) if req notin install_requires
] for extra in dist.extras
}
os.rename(dist_info, egg_info)
os.rename(
os.path.join(egg_info, 'METADATA'),
os.path.join(egg_info, 'PKG-INFO'),
)
setup_dist = setuptools.Distribution(
attrs=dict(
install_requires=install_requires,
extras_require=extras_require,
),
) with disable_info_traces():
write_requirements(
setup_dist.get_command_obj('egg_info'), None,
os.path.join(egg_info, 'requires.txt'),
)
@staticmethod def _move_data_entries(destination_eggdir, dist_data): """Move data entries to their correct location."""
dist_data = os.path.join(destination_eggdir, dist_data)
dist_data_scripts = os.path.join(dist_data, 'scripts') if os.path.exists(dist_data_scripts):
egg_info_scripts = os.path.join(destination_eggdir, 'EGG-INFO', 'scripts')
os.mkdir(egg_info_scripts) for entry in os.listdir(dist_data_scripts): # Remove bytecode, as it's not properly handled # during easy_install scripts install phase. if entry.endswith('.pyc'):
os.unlink(os.path.join(dist_data_scripts, entry)) else:
os.rename(
os.path.join(dist_data_scripts, entry),
os.path.join(egg_info_scripts, entry),
)
os.rmdir(dist_data_scripts) for subdir in filter(
os.path.exists,
(
os.path.join(dist_data, d) for d in ('data', 'headers', 'purelib', 'platlib')
),
):
unpack(subdir, destination_eggdir) if os.path.exists(dist_data):
os.rmdir(dist_data)
for mod in namespace_packages:
mod_dir = os.path.join(destination_eggdir, *mod.split('.'))
mod_init = os.path.join(mod_dir, '__init__.py') ifnot os.path.exists(mod_dir):
os.mkdir(mod_dir) ifnot os.path.exists(mod_init): with open(mod_init, 'w', encoding="utf-8") as fp:
fp.write(NAMESPACE_PACKAGE_INIT)
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.