build: remove dependency on distutils.spawn
Debian based packages of Python 3 do not include `distutils.spawn` and require an additional apt package to be installed (`python3-distutils`). Replace use of `distutils.spawn` with `shutil.which`, available in all versions of Python currently allowed by our configure scripts. For the `configure` script only, fall back to `distutils.spawn` to allow friendlier error messages when run on older unsupported versions of Python (e.g. 2.7). `configure.py` also uses `distutils.version` -- this appears to be available in Debian packaged Python 3 without installing `python3-distutils` so has been left as-is. PR-URL: https://github.com/nodejs/node/pull/38600 Refs: https://github.com/nodejs/node/issues/30189 Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Christian Clauss <cclauss@me.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
63155c95ba
commit
16982b6c4d
@ -246,8 +246,6 @@ Installation via Linux package manager can be achieved with:
|
|||||||
|
|
||||||
FreeBSD and OpenBSD users may also need to install `libexecinfo`.
|
FreeBSD and OpenBSD users may also need to install `libexecinfo`.
|
||||||
|
|
||||||
Python 3 users may also need to install `python3-distutils`.
|
|
||||||
|
|
||||||
#### macOS prerequisites
|
#### macOS prerequisites
|
||||||
|
|
||||||
* Xcode Command Line Tools >= 11 for macOS
|
* Xcode Command Line Tools >= 11 for macOS
|
||||||
@ -271,11 +269,6 @@ $ ./configure
|
|||||||
$ make -j4
|
$ make -j4
|
||||||
```
|
```
|
||||||
|
|
||||||
If you run into a `No module named 'distutils.spawn'` error when executing
|
|
||||||
`./configure`, please try `python3 -m pip install --upgrade setuptools` or
|
|
||||||
`sudo apt install python3-distutils -y`.
|
|
||||||
For more information, see <https://github.com/nodejs/node/issues/30189>.
|
|
||||||
|
|
||||||
The `-j4` option will cause `make` to run 4 simultaneous compilation jobs which
|
The `-j4` option will cause `make` to run 4 simultaneous compilation jobs which
|
||||||
may reduce build time. For more information, see the
|
may reduce build time. For more information, see the
|
||||||
[GNU Make Documentation](https://www.gnu.org/software/make/manual/html_node/Parallel.html).
|
[GNU Make Documentation](https://www.gnu.org/software/make/manual/html_node/Parallel.html).
|
||||||
|
7
configure
vendored
7
configure
vendored
@ -15,7 +15,10 @@ exec python "$0" "$@"
|
|||||||
del _
|
del _
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from distutils.spawn import find_executable
|
try:
|
||||||
|
from shutil import which
|
||||||
|
except ImportError:
|
||||||
|
from distutils.spawn import find_executable as which
|
||||||
|
|
||||||
print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info))
|
print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info))
|
||||||
acceptable_pythons = ((3, 9), (3, 8), (3, 7), (3, 6))
|
acceptable_pythons = ((3, 9), (3, 8), (3, 7), (3, 6))
|
||||||
@ -25,7 +28,7 @@ else:
|
|||||||
python_cmds = ['python{}.{}'.format(*vers) for vers in acceptable_pythons]
|
python_cmds = ['python{}.{}'.format(*vers) for vers in acceptable_pythons]
|
||||||
sys.stderr.write('Please use {}.\n'.format(' or '.join(python_cmds)))
|
sys.stderr.write('Please use {}.\n'.format(' or '.join(python_cmds)))
|
||||||
for python_cmd in python_cmds:
|
for python_cmd in python_cmds:
|
||||||
python_cmd_path = find_executable(python_cmd)
|
python_cmd_path = which(python_cmd)
|
||||||
if python_cmd_path and 'pyenv/shims' not in python_cmd_path:
|
if python_cmd_path and 'pyenv/shims' not in python_cmd_path:
|
||||||
sys.stderr.write('\t{} {}\n'.format(python_cmd_path, ' '.join(sys.argv[:1])))
|
sys.stderr.write('\t{} {}\n'.format(python_cmd_path, ' '.join(sys.argv[:1])))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -14,7 +14,7 @@ import shutil
|
|||||||
import bz2
|
import bz2
|
||||||
import io
|
import io
|
||||||
|
|
||||||
from distutils.spawn import find_executable as which
|
from shutil import which
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
|
|
||||||
# If not run from node/, cd to node/.
|
# If not run from node/, cd to node/.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user