PipPackageSystem: If EXTERNALLY-MANAGED, issue venv instructions; use Feature(spkg='pkg:pypi/DISTRO-NAME')#37250
PipPackageSystem: If EXTERNALLY-MANAGED, issue venv instructions; use Feature(spkg='pkg:pypi/DISTRO-NAME')#37250mkoeppe wants to merge 9 commits intosagemath:developfrom
PipPackageSystem: If EXTERNALLY-MANAGED, issue venv instructions; use Feature(spkg='pkg:pypi/DISTRO-NAME')#37250Conversation
|
@tornaria @orlitzky @kiwifb |
|
I don't really have a problem with the way it works now. Isolating a python program from the python environment gets a "well, don't do that" from me. We have |
|
Are you sure you're posting on the right PR? |
|
Yeah. We're trying to figure out a goofy hack (pip instructions) to an existing goofy hack (package management in sage) that is only needed because sage-the-distribution has historically caused problems for itself. The best long-term solution is for people to be able to |
|
No, you're missing the point. That users need info how to install components is independent of how Sage is installed or deployed. |
I understand. What it should say is |
|
Thanks for the clarification, that's all certainly very consistent. And I'll guess within this framework, "the one approach that actually works well" = "compiling monolithically from source on the user's (= developer's) machine with a static configuration of everything known at compile time"? |
In this case all I meant was building and installing sagelib "normally," outside of sage-the-distribution. Though, yes, using the standard |
Copied from #37231 (comment):Anyway, I discovered that sage already supports this idea. That is why So this gives a possible way to move forward. |
Maybe the feature should be |
Yes, that would be a possible solution, thanks for the input! If we go with this solution, I would extend The more verbose solution |
@tornaria I have implemented a version of this now. Using |
|
Instead of the ad-hoc nickname scheme |
|
Documentation preview for this PR (built with commit 6de05ad; changes) is ready! 🎉 |
sagemathgh-37500: `sage --package`, `sage-get-system-packages`: Support PURLs `pkg:pypi/DISTRO-NAME`, obtain dependencies of wheels from PyPI <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> We make it possible to refer to Python packages via their PURL (see [draft PEP 725](https://peps.python.org/pep-0725/#concrete-package- specification-through-purl)) instead of their SPKG name. For now a string of the form `pkg:pypi/DISTRO-NAME` is simply a nickname for the (unique) SPKG that has DISTRO-NAME in their `install- requires.txt` or `requirements.txt`. The scheme can also be omitted: `pypi/DISTRO-NAME` also works. And we also map `pkg:generic/PACKAGE- NAME` to `PACKAGE_NAME`. Based on code by @culler, `sage --package create --pypi` now also fills `dependencies` from the PyPI metadata of wheel packages. When some of the Python dependencies obtained in this way do not have SPKGs yet, they are also automatically created. - Preparation for sagemath#31136. - Split out from sagemath#37250. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> URL: sagemath#37500 Reported by: Matthias Köppe Reviewer(s): Kwankyu Lee, Marc Culler, Matthias Köppe
sagemathgh-37500: `sage --package`, `sage-get-system-packages`: Support PURLs `pkg:pypi/DISTRO-NAME`, obtain dependencies of wheels from PyPI <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> We make it possible to refer to Python packages via their PURL (see [draft PEP 725](https://peps.python.org/pep-0725/#concrete-package- specification-through-purl)) instead of their SPKG name. For now a string of the form `pkg:pypi/DISTRO-NAME` is simply a nickname for the (unique) SPKG that has DISTRO-NAME in their `version_requirements.txt` or `requirements.txt`. The scheme can also be omitted: `pypi/DISTRO-NAME` also works. And we also map `pkg:generic/PACKAGE-NAME` to `PACKAGE_NAME`. Based on code by @culler, `sage --package create --pypi` now also fills `dependencies` from the PyPI metadata of wheel packages. When some of the Python dependencies obtained in this way do not have SPKGs yet, they are also automatically created. - Preparation for sagemath#31136. - Split out from sagemath#37250. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> URL: sagemath#37500 Reported by: Matthias Köppe Reviewer(s): Kwankyu Lee, Marc Culler, Matthias Köppe
…sue venv instructions
…of strings; quoting fixes
|
For distros that implement |
|
@antonio-rojas What does Arch recommend? |
To install the distro packages using the package manager |
As discussed in #37231 (comment), when Sage is installed in a distro that protects the integrity of system Python using the PEP-0668 EXTERNALLY-MANAGED mechanism, to extend their system installation of Sage, users cannot use
pip install(because of permissions and the EXTERNALLY-MANAGED mechanism) norpip install --user(because the user scheme is disabled).Here we detect this situation and provide instructions that follow the best practices:
After #37500,
sage --packagecommands accept PURLs (strings of the formpkg:pypi/DISTRO-NAMEas a nickname for the SPKG that have DISTRO-NAME in theirinstall-requires.txtorrequirements.txt); see https://peps.python.org/pep-0725/#concrete-package-specification-through-purlWe change
Featuredefinitions to use these PURLs instead of the SPKG names.These changes allow
FeatureNotPresentErrorto issue the pip installation advice even in downstream deployments that do not haveSAGE_ROOT/build/pkgsetc.📝 Checklist
⌛ Dependencies
sage --package,sage-get-system-packages: Support PURLspkg:pypi/DISTRO-NAME, obtain dependencies of wheels from PyPI #37500