coiled / feedback

A place to provide Coiled feedback
14 stars 3 forks source link

Wheel creation failed due to strange character in path #250

Closed dharhas closed 11 months ago

dharhas commented 11 months ago

(this is matt on Dharhas's computer)

import coiled
cluster = coiled.Cluster(n_workers=20)
---------------------------------------------------------------------------
InvalidWheelFilename                      Traceback (most recent call last)
Cell In[2], line 1
----> 1 cluster = coiled.Cluster(n_workers=20)

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/v2/cluster.py:632, in Cluster.__init__(self, name, software, container, n_workers, worker_class, worker_options, worker_vm_types, worker_cpu, worker_memory, worker_disk_size, worker_disk_throughput, worker_gpu, worker_gpu_type, scheduler_class, scheduler_options, scheduler_vm_types, scheduler_cpu, scheduler_memory, scheduler_gpu, asynchronous, cloud, account, shutdown_on_close, idle_timeout, use_scheduler_public_ip, use_dashboard_https, credentials, credentials_duration_seconds, timeout, environ, tags, send_dask_config, backend_options, show_widget, configure_logging, wait_for_workers, package_sync, package_sync_strict, package_sync_ignore, package_sync_fail_on, private_to_creator, use_best_zone, compute_purchase_option, extra_worker_on_scheduler, scheduler_port, allow_ingress_from, allow_ssh, jupyter, region, arm)
    630     error = e
    631     self.close()
--> 632     raise e.with_traceback(truncate_traceback(e.__traceback__))
    633 finally:
    634     if error:

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/v2/cluster.py:613, in Cluster.__init__(self, name, software, container, n_workers, worker_class, worker_options, worker_vm_types, worker_cpu, worker_memory, worker_disk_size, worker_disk_throughput, worker_gpu, worker_gpu_type, scheduler_class, scheduler_options, scheduler_vm_types, scheduler_cpu, scheduler_memory, scheduler_gpu, asynchronous, cloud, account, shutdown_on_close, idle_timeout, use_scheduler_public_ip, use_dashboard_https, credentials, credentials_duration_seconds, timeout, environ, tags, send_dask_config, backend_options, show_widget, configure_logging, wait_for_workers, package_sync, package_sync_strict, package_sync_ignore, package_sync_fail_on, private_to_creator, use_best_zone, compute_purchase_option, extra_worker_on_scheduler, scheduler_port, allow_ingress_from, allow_ssh, jupyter, region, arm)
    611 error = None
    612 try:
--> 613     self.sync(self._start)
    614 except (ClusterCreationError, InstanceTypeError) as e:
    615     error = e

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/v2/cluster.py:1157, in Cluster._start(self)
   1150 if not self.package_sync:
   1151     parse_identifier(
   1152         self.software_environment,
   1153         property_name="software_environment",
   1154         can_have_revision=False,
   1155     )
-> 1157 senv_v2_id = await self._determine_senv(architecture=architecture, gpu_enabled=self._is_gpu_cluster)
   1159 self.cluster_id, cluster_existed = await cloud._create_cluster(
   1160     account=self.account,
   1161     name=self.name,
   (...)
   1182     extra_worker_on_scheduler=self.extra_worker_on_scheduler,
   1183 )
   1184 cluster_created = not cluster_existed

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/v2/cluster.py:838, in Cluster._determine_senv(self, architecture, gpu_enabled)
    836         package_level_lookup[(package, "conda")] = PackageLevelEnum.IGNORE
    837         package_level_lookup[(package, "pip")] = PackageLevelEnum.IGNORE
--> 838 approximation = await magic.create_environment_approximation(
    839     cloud=self.cloud,
    840     only=self.package_sync_only,
    841     priorities=package_level_lookup,
    842     strict=self.package_sync_strict,
    843     progress=progress,
    844     architecture=architecture,
    845 )
    847 if not self.package_sync_only:
    848     # if we're not operating on a subset, check
    849     # all the coiled defined critical packages are present
    850     packages_by_name: Dict[str, magic.ResolvedPackageInfo] = {p["name"]: p for p in approximation}

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/magic.py:562, in create_environment_approximation(cloud, priorities, only, strict, progress, architecture)
    560     packages = filter(lambda pkg: pkg["name"] in only, packages)
    561 # TODO: private conda channels
--> 562 result = await approximate_packages(
    563     cloud=cloud,
    564     packages=[pkg for pkg in packages],
    565     priorities=priorities,
    566     strict=strict,
    567     progress=progress,
    568     architecture=architecture,
    569 )
    570 for bad_package, error_list in bad_packages.items():
    571     errors = "\n".join(error_list)

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/magic.py:452, in approximate_packages(cloud, packages, priorities, progress, strict, architecture)
    449     if pkg["wheel_target"]:
    450         with simple_progress(f'Creating wheel for {pkg["wheel_target"]}', progress=progress):
    451             finalized_packages.append(
--> 452                 await create_wheel_from_src_dir(
    453                     pkg_name=pkg["name"],
    454                     version=pkg["version"],
    455                     src=pkg["wheel_target"],
    456                 )
    457             )
    458 for pkg in packages:
    459     package_result = result_map[(pkg["name"], pkg["conda_name"])]

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/coiled/magic.py:291, in create_wheel_from_src_dir(pkg_name, version, src)
    289         wheel_fn = next(file for file in outdir.iterdir() if file.suffix == ".whl")
    290     logger.info(f"Using wheel @ {wheel_fn}")
--> 291     _, build_version, _, _ = parse_wheel_filename(str(wheel_fn.name))
    292     has_python, md5, missing_py_files = await validate_wheel(wheel_fn, src)
    293 return {
    294     "name": pkg_name,
    295     "source": "pip",
   (...)
    307     "md5": md5,
    308 }

File /home/conda/dharhas@quansight.com/bd85c2f288e2a55b0a5e4da6a0cbe80933a598927c7a866cde8165fc9a888d1f-20230715-205237-111160-318-coiled/lib/python3.11/site-packages/packaging/utils.py:105, in parse_wheel_filename(filename)
    103 # See PEP 427 for the rules on escaping the project name
    104 if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
--> 105     raise InvalidWheelFilename(f"Invalid project name: {filename}")
    106 name = canonicalize_name(name_part)
    107 version = Version(parts[1])

InvalidWheelFilename: Invalid project name: coiled_local_dharhas@quansight.com-0.0.0-py3-none-any
jrbourbeau commented 11 months ago

cc @dan-blanchard for visibility

shughes-uk commented 11 months ago

should be relatively easy to sanitize the input but does need a fix from us

ntabris commented 11 months ago

The fix for this is going out shortly as coiled=0.8.11 (will be on pypi very soon, will be on conda-forge later today)