-
-
Notifications
You must be signed in to change notification settings - Fork 452
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gh-36367: Simplify experimental all-conda installation instructions v…
…ia `pkgs/sage-conf_conda` <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes #1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> This is a version of sage-conf for the experimental all-conda installation method. It calls `configure` with the whole long set of options, which simplifies the instructions for the user. The new instructions use editable mode (PEP 660) for `pkgs/sage- conf_conda`, but it also works to install it in non-editable mode. <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes #12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!-- Feel free to remove irrelevant items. --> - [x] The title is concise, informative, and self-explanatory. - [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 - #12345: short description why this is a dependency - #34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: #36367 Reported by: Matthias Köppe Reviewer(s): Isuru Fernando, Tobias Diez
- Loading branch information
Showing
16 changed files
with
297 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
/_sage_conf/_conf.py | ||
/build | ||
/dist | ||
/*.egg-info | ||
/.tox | ||
/bin/sage-env-config |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
prune .tox | ||
include VERSION.txt | ||
graft bin | ||
exclude bin/sage-env-config # generated by configure | ||
|
||
prune sage_root | ||
include sage_root/Makefile | ||
include sage_root/README.md | ||
include sage_root/VERSION.txt | ||
include sage_root/bootstrap | ||
include sage_root/bootstrap-conda | ||
graft sage_root/build | ||
prune sage_root/build/.tox | ||
exclude sage_root/build/bin/sage-build-env-config # generated by configure | ||
exclude sage_root/build/make/Makefile-auto # generated by configure | ||
exclude sage_root/build/make/Makefile # generated by configure | ||
|
||
# These sources are not needed because individual distributions of these are made. | ||
prune sage_root/build/pkgs/*/src* | ||
|
||
graft sage_root/config | ||
include sage_root/configure | ||
include sage_root/configure.ac | ||
graft sage_root/m4 | ||
|
||
# Only these pkgs are needed (because of dependencies on source files, | ||
# see "git grep SAGE_ROOT build/pkgs/*/dependencies") | ||
graft sage_root/pkgs/sage-conf | ||
prune sage_root/pkgs/sage-conf/build | ||
prune sage_root/pkgs/sage-conf/dist | ||
prune sage_root/pkgs/sage-conf/*.egg-info | ||
exclude sage_root/pkgs/sage-conf/_sage_conf/_conf.py # generated by configure | ||
graft sage_root/pkgs/sage-docbuild | ||
prune sage_root/pkgs/sage-docbuild/build | ||
prune sage_root/pkgs/sage-docbuild/dist | ||
prune sage_root/pkgs/sage-docbuild/*.egg-info | ||
|
||
graft sage_root/src/_sage_conf | ||
include sage_root/src/bin/sage-env | ||
include sage_root/src/bin/sage-env-config.in | ||
include sage_root/src/bin/sage-src-env-config.in | ||
include sage_root/src/bin/sage-venv-config | ||
include sage_root/src/bin/sage-version.sh | ||
include sage_root/src/doc/bootstrap # FIXME: should move to builds/pkgs/sagemath_doc_html/ | ||
|
||
global-exclude .tox | ||
global-exclude *~* | ||
global-exclude *.bak | ||
global-exclude *.orig | ||
global-exclude __pycache__ | ||
global-exclude *.py[co] | ||
global-exclude *.so | ||
global-exclude .DS_Store |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/README.rst |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
10.2.beta5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/_sage_conf |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf_pypi/bin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/pyproject.toml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/sage_conf.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../.. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/setup.cfg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
import os | ||
import sys | ||
import shutil | ||
import sysconfig | ||
import platform | ||
import fnmatch | ||
|
||
from pathlib import Path | ||
|
||
from setuptools import setup | ||
from distutils.command.build_scripts import build_scripts as distutils_build_scripts | ||
from setuptools.command.build_py import build_py as setuptools_build_py | ||
from setuptools.command.editable_wheel import editable_wheel as setuptools_editable_wheel | ||
from setuptools.errors import SetupError | ||
|
||
|
||
class build_py(setuptools_build_py): | ||
|
||
def run(self): | ||
|
||
HERE = os.path.dirname(__file__) | ||
if self.editable_mode: | ||
SAGE_ROOT = os.path.join(HERE, 'sage_root') | ||
else: | ||
SAGE_ROOT = self._create_writable_sage_root() | ||
|
||
if not os.environ.get('CONDA_PREFIX', ''): | ||
raise SetupError('No conda environment is active. ' | ||
'See https://doc.sagemath.org/html/en/installation/conda.html on how to get started.') | ||
|
||
if os.path.exists(os.path.join(SAGE_ROOT, 'config.status')): | ||
print(f'Reusing configured SAGE_ROOT={SAGE_ROOT}') | ||
else: | ||
cmd = f"cd {SAGE_ROOT} && ./configure --enable-build-as-root --with-system-python3=force --disable-notebook --disable-sagelib --disable-sage_conf --disable-doc" | ||
cmd += ' --with-python=$CONDA_PREFIX/bin/python --prefix="$CONDA_PREFIX"' | ||
cmd += ' $(for pkg in $(PATH="build/bin:$PATH" build/bin/sage-package list :standard: --exclude rpy2 --has-file spkg-configure.m4 --has-file distros/conda.txt); do echo --with-system-$pkg=force; done)' | ||
print(f"Running {cmd}") | ||
sys.stdout.flush() | ||
if os.system(cmd) != 0: | ||
if os.path.exists(os.path.join(SAGE_ROOT, 'config.status')): | ||
print("Warning: A configuration has been written, but the configure script has exited with an error. " | ||
"Carefully check any messages above before continuing.") | ||
else: | ||
print(f"Error: The configure script has failed; this may be caused by missing build prerequisites.") | ||
sys.stdout.flush() | ||
PREREQ_SPKG = "_prereq bzip2 xz libffi" # includes python3 SPKG_DEPCHECK packages | ||
os.system(f'cd {SAGE_ROOT} && export PACKAGES="$(build/bin/sage-get-system-packages conda {PREREQ_SPKG})" && [ -n "$PACKAGES" ] && echo "You can install the required build prerequisites using the following shell command" && echo "" && build/bin/sage-print-system-package-command conda --verbose --sudo install $PACKAGES && echo ""') | ||
raise SetupError("configure failed") | ||
|
||
# In this mode, we never run "make". | ||
|
||
# Copy over files generated by the configure script | ||
# (see configure.ac AC_CONFIG_FILES) | ||
if self.editable_mode: | ||
pass # same file | ||
else: | ||
shutil.copyfile(os.path.join(SAGE_ROOT, 'pkgs', 'sage-conf', '_sage_conf', '_conf.py'), | ||
os.path.join(HERE, '_sage_conf', '_conf.py')) | ||
shutil.copyfile(os.path.join(SAGE_ROOT, 'src', 'bin', 'sage-env-config'), | ||
os.path.join(HERE, 'bin', 'sage-env-config')) | ||
|
||
setuptools_build_py.run(self) | ||
|
||
def _create_writable_sage_root(self): | ||
HERE = os.path.dirname(__file__) | ||
DOT_SAGE = os.environ.get('DOT_SAGE', os.path.join(os.environ.get('HOME'), '.sage')) | ||
with open(os.path.join(HERE, 'VERSION.txt')) as f: | ||
sage_version = f.read().strip() | ||
# After #30534, SAGE_LOCAL no longer contains any Python. So we key the SAGE_ROOT only to Sage version | ||
# and architecture. | ||
system = platform.system() | ||
machine = platform.machine() | ||
arch_tag = f'{system}-{machine}' | ||
# TODO: Should be user-configurable with config settings | ||
SAGE_ROOT = os.path.join(DOT_SAGE, f'sage-{sage_version}-{arch_tag}-conda') | ||
|
||
def ignore(path, names): | ||
# exclude all embedded src trees | ||
if fnmatch.fnmatch(path, f'*/build/pkgs/*'): | ||
return ['src'] | ||
### ignore more stuff --- .tox etc. | ||
return [name for name in names | ||
if name in ('.tox', '.git', '__pycache__', | ||
'prefix', 'local', 'venv', 'upstream', | ||
'config.status', 'config.log', 'logs')] | ||
|
||
if not os.path.exists(os.path.join(SAGE_ROOT, 'config.status')): | ||
# config.status and other configure output has to be writable. | ||
# So (until the Sage distribution supports VPATH builds - #21469), we have to make a copy of sage_root. | ||
try: | ||
shutil.copytree('sage_root', SAGE_ROOT, | ||
ignore=ignore) # will fail if already exists | ||
except Exception as e: | ||
raise SetupError(f"the directory SAGE_ROOT={SAGE_ROOT} already exists but it is not configured ({e}). " | ||
"Please either remove it and try again, or install in editable mode (pip install -e).") | ||
|
||
return SAGE_ROOT | ||
|
||
|
||
class build_scripts(distutils_build_scripts): | ||
|
||
def run(self): | ||
self.distribution.scripts.append(os.path.join('bin', 'sage-env-config')) | ||
if not self.distribution.entry_points: | ||
self.entry_points = self.distribution.entry_points = dict() | ||
distutils_build_scripts.run(self) | ||
|
||
|
||
class editable_wheel(setuptools_editable_wheel): | ||
r""" | ||
Customized so that exceptions raised by our build_py | ||
do not lead to the "Customization incompatible with editable install" message | ||
""" | ||
_safely_run = setuptools_editable_wheel.run_command | ||
|
||
|
||
setup( | ||
cmdclass=dict(build_py=build_py, | ||
build_scripts=build_scripts, | ||
editable_wheel=editable_wheel) | ||
) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../sage-conf/pyproject.toml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.