Dave D
10/08/2024, 12:55 AMFlow could not be retrieved from deployment.
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 246, in retrieve_flow_then_begin_flow_run
flow = await load_flow_from_flow_run(flow_run, client=client)
File "/usr/local/lib/python3.9/site-packages/prefect/client.py", line 105, in with_injected_client
return await fn(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/deployments.py", line 50, in load_flow_from_flow_run
basepath = deployment.path or Path(deployment.manifest_path).parent
File "/usr/local/lib/python3.9/pathlib.py", line 1082, in __new__
self = cls._from_parts(args, init=False)
File "/usr/local/lib/python3.9/pathlib.py", line 707, in _from_parts
drv, root, parts = self._parse_args(args)
File "/usr/local/lib/python3.9/pathlib.py", line 691, in _parse_args
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType
Marvin
10/08/2024, 12:55 AMTypeError
when the program expects a string, bytes, or os.PathLike object but receives a NoneType
object instead. This issue occurs in the context of retrieving a flow from a deployment in Prefect.
The problem originates from this line in the stack trace:
python
basepath = deployment.path or Path(deployment.manifest_path).parent
Here's a breakdown of the possible causes:
1. Missing Deployment Details: The deployment.path
or deployment.manifest_path
attributes could be None
. This scenario is likely if the deployment wasn't set up correctly or if there's a mismatch in your deployment configuration.
2. Configuration Issue: There might be a configuration problem or missing data in the database or YAML file defining your deployment.
3. Prefect Version: This error might also vary based on the version of Prefect you're using. Prefect 2.x and 3.x might have differences in handling flow retrieval.
To resolve this issue, ensure that the deployment is correctly configured. Verify that the deployment.path
and/or deployment.manifest_path
are properly set and not None
for the flow you're trying to run.
Let's quickly check the Prefect documentation for more precise solutions based on the Prefect version you might be using. Could you confirm which version of Prefect you're working with?Dave D
10/08/2024, 12:56 AMDave D
10/08/2024, 12:57 AMDave D
10/08/2024, 12:58 AMMarvin
10/08/2024, 12:59 AMbucket
and folder
need to be accurately defined.
- Double-check that your Prefect deployment YAML or CLI options properly reference the S3 bucket and path, as shown in the Prefect 3.x documentation examples.
2. Use Prefect-AWS Plugin:
- If your bucket is private, ensure that you've installed the Prefect-AWS plugin (prefect-aws
) and have properly configured AWS credentials blocks.
- Use the push_to_s3
step from the prefect_aws.deployments
in your deployment configuration to manage code upload to S3.
3. Correct Use of CLI:
- When using the Prefect CLI for deployment, check that all paths are set explicitly and ensure no part of the path (like manifest_path
) is left undefined.
4. Infrastructure and Storage Blocks:
- Using infrastructure and storage blocks may help clarify and isolate path configuration issues. Prefect allows using blocks for specifying storage and pulling code from a specific location.
Here are relevant sections of the Prefect 3.x documentation:
- Using S3 for storage and deployment: Prefect Deploy with AWS S3
- Using infrastructure blocks: Prefect Infrastructure Concepts
By revisiting your deployment configuration, ensuring all paths are explicitly set, and using the AWS plugin for credentials, you should be able to resolve the NoneType
error.