-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dealing with dependencies in pyCSEP #192
Comments
I believe it is important that each pyCSEP distribution provides list of package versions that work. The release can leave the packages unspecified, but the user should be able to find a complete list of the combination of versions that work. Maybe this list of versions can be given in a Dockerfile, or with an environment summary from the CI stack. |
Too bad that PEP 665 got rejected. Luckily, there will be a 'take 2'. I had exactly the same thought as Philip: For every release, we (you) could provide a |
I like that idea as well. This should be done by CI during the release flow and should create and register a docker image of the build. What is the reason behind not pinning all dependencies and only the packages that pycsep requires? |
Great.
I thought to keep the |
I ask because that was my first thought as well, and how I implemented things for the first iteration of the global experiment. There are caveats though. A pro of that solution is that it provides cross-platform support, because we cannot guarantee the exact same environment across different OS using an exact environment specification. Different binaries, etc. I think Docker provides a good solution for cross-platform support. We could maybe provide both, a requirements.yml and an environment.yml where the former will provide pinned deps for pycsep and the latter will provide an exact environment that will run on Ubuntu. |
A similar approach is also suggested in this article: Reproducible and upgradable Conda environments with conda-lock Essentially:
BUT, more interestingly, the article proposes a solution for the several technical difficulties with So we can create kind-of platform-specific Cool: the conda environment can be created directly from this lock file: |
I like that approach of creating platform specific lock files, we can just do that on release and then provide folks with a reproducible installation. I still think Docker is a solid tool for sharing environments, but this conda-lock is worth exploring. If we can provide some of the leg work in setting up Dockerfiles or at least a template, I'm pretty happy with the tool. There is also a tool called |
I wonder if we could provide wheels for the required dependencies, which could also deal with cartopy/pygeos issues. |
Working through the reproducibility packages and thinking about the testing experiments uncovered the need for a discussion on how we are managing the dependencies in pyCSEP.
Currently we are only pinning dependencies when a conflict or issue is known. Once the issue or conflict has been resolved we remove the pin.
Pros of this approach:
Cons of this approach:
Goals:
Possible ways improve reproducibility of the computing environment:
References
The text was updated successfully, but these errors were encountered: