-
-
Notifications
You must be signed in to change notification settings - Fork 488
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
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; use Feature(spkg='pkg:pypi/DISTRO-NAME')
#37250
base: develop
Are you sure you want to change the base?
Conversation
@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 |
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructionsPipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; support Feature(spkg='pypi:DISTRO-NAME')
83a9112
to
16a0038
Compare
16a0038
to
e234fd9
Compare
Instead of the ad-hoc nickname scheme |
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; support Feature(spkg='pypi:DISTRO-NAME')
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; support Feature(spkg='pkg:pypi/DISTRO-NAME')
Documentation preview for this PR (built with commit 6de05ad; changes) is ready! 🎉 |
…rt 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
…rt 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
21d4e00
to
9107f69
Compare
d77f7ce
to
b522cf1
Compare
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; support Feature(spkg='pkg:pypi/DISTRO-NAME')
PipPackageSystem
: If EXTERNALLY-MANAGED, issue venv instructions; use Feature(spkg='pkg:pypi/DISTRO-NAME')
3917648
to
74b64d5
Compare
74b64d5
to
3eb2a70
Compare
3eb2a70
to
cd93dd3
Compare
…sue venv instructions
…of strings; quoting fixes
7642283
to
6de05ad
Compare
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 --package
commands accept PURLs (strings of the formpkg:pypi/DISTRO-NAME
as a nickname for the SPKG that have DISTRO-NAME in theirinstall-requires.txt
orrequirements.txt
); see https://peps.python.org/pep-0725/#concrete-package-specification-through-purlWe change
Feature
definitions to use these PURLs instead of the SPKG names.These changes allow
FeatureNotPresentError
to issue the pip installation advice even in downstream deployments that do not haveSAGE_ROOT/build/pkgs
etc.📝 Checklist
⌛ Dependencies
sage --package
,sage-get-system-packages
: Support PURLspkg:pypi/DISTRO-NAME
, obtain dependencies of wheels from PyPI #37500