GoogleCloudPlatform / GoogleCloudPlatform/functions-framework-python

Symbolic linking within the Source Directory to include shared local directories.

Open
#265 0 comments 4 reactions 0 assignees View on GitHub
enhancement P3
Dominant language
Python
Stars
968
Forks
128
PR merge metrics
No merged PRs in 30d

Description

As the design specification makes clear, the source directories are expected to include `main.py`, `requirements.txt`, and `__init__.py`. Additional local dependencies (i.e., code) may be specified so long as their imports are within the source directory, as described [here](https://cloud.google.com/functions/docs/writing/specifying-dependencies-python#packaging_local_dependencies). This precludes the importing of sibling or parent directories.

In this directory setup, `main.py` can `import internal.code_internal` and, if `base/` has been added to the PythonPath, can `import base.code_sibling`. The limitations (by design) of Cloud Functions does not allow this latter import, as only the contents of `functions/f/` will be deployed to its servers. My question refers to workarounds and uses of symbolic links.
```
base/
__init__.py
code_sibling.py
functions/
f/
__init
main.py
requirements.txt
internal/
__init__.py
code_internal.py
```

In conventional Python, a symbolic link can be added to `functions/f/` which points to `base/`, and which then makes the contents of `base/` able to be imported as though they are directly in the `functions/f/` directory: in other words, as though the file `functions/f/base/code_sibling.py` exists. However, this improvement does not change the deployment behavior of Cloud Functions: the symbolic link is (seemingly ignored by `gcloud functions deploy`. Instead, I am finding myself directly copying the `base/` directory into `functions/f/`, then deploying the Cloud Function, then deleting the copied files of `functions/f/base/`.

Is support for symbolic links going to be supported, or are there other workarounds that better address the situation?
Thank you.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.