Nodeenv changelog
Version [unreleased]
env_dir in the [nodeenv] section of the config file sets DEST_DIR for runs that pass neither DEST_DIR nor -p. DEST_DIR on the command line and -p take precedence over it #377
The package metadata moved from setup.py to pyproject.toml, and setup.py is gone: build nodeenv with a PEP 517 frontend such as pip or python -m build. Building needs setuptools 77 or later. The license is declared as the SPDX expression BSD-3-Clause #374
Version 1.12.0
--print-completion SHELL prints a completion script for bash, zsh or fish. It needs shtab, installed with pip install "nodeenv[completion]" #351
--prebuilt installs no longer fail when the environment path or the node.js version contains [, * or ? #441
On Windows, Cygwin and MSYS the node.js zip archive is extracted 32 files at a time instead of one by one, so a security scanner that checks every new file no longer makes the install wait for each file in turn. --no-parallel-extract, or parallel_extract = False in ~/.nodeenvrc, extracts it one file at a time again #366
--prebuilt installs no longer mistake a cached source tree for a prebuilt archive, or fail when both trees remain in src/ #443
activate.fish restores the caller's NODE_PATH and npm configuration on deactivation, including empty values and when NODE_VIRTUAL_ENV has been removed. Existing environments keep their old activate.fish; recreate them with the same options to get the fix. With -p, remove the old nodeenv part from the virtualenv's activate.fish first #399
A % in a [nodeenv] config value, such as a percent-encoded mirror login, no longer crashes nodeenv: a value that can't be interpolated and has no %(name)s reference is read as written. %% still gives %, which setup.cfg needs, as setuptools reads that file too #440
nodeenv -p no longer puts the python venv's bin directory on PATH a second time: the venv's own activate and activate.fish put it there already. Envs without those scripts, such as conda envs, and the git-bash activate on Windows keep it, and running nodeenv -p again fixes an existing venv #332
Require Python 3.10 or later, matching the minimum version tested in CI. Update package classifiers and wheel tags, and remove the unused Python 2 compatibility paths. Old Node.js source builds still require Python 2.7 as their build interpreter #436
--source builds of node.js 13 and later no longer need a python2 command; 8.8 to 12.x still need one but point python at it on their own, so the python to python2 link in PATH is only set up for older versions, and versions before 13 still fail early with a clear error when python2 is missing #419
The node.js archive download also retries when the connection is reset or times out in the middle of the body, pauses between the attempts and ends with an error message instead of a traceback when all of them fail; a server that stops answering is given up on after 60 seconds instead of hanging nodeenv #324
activate.fish no longer puts a literal ^/dev/null on PATH: fish 3.1+ defaults to stderr-nocaret, so the old caret redirect was one more path entry; existing environments keep the old activate.fish until recreated with --force #400
activate.bat and Activate.ps1 now set npm_config_prefix to the environment and restore it on deactivate: npx exports the outer prefix, and npm.cmd runs the npm it finds there instead of its own #309
--with-npm on Windows and Cygwin installs npm from the registry tarball instead of the GitHub source archive, whose workspace symlinks unpacked as text files (npm 8) and whose workspaces are missing (npm >= 9); the default --npm=latest no longer ends in a 404 there #310
Quoted values in the config file, as the README shows them, are read without the quotes, and user:password@ in the --mirror URL is sent to the mirror with HTTP Basic authentication instead of being taken for a part of the host; the password stays out of error messages and redirects #321
Version 1.11.1
latest, the default, and semver ranges such as --node=26 no longer pick pre-releases: once nodejs.org listed 27.0.0-alpha.0.0.0, both stopped with a traceback. An exact pre-release, such as --node=27.0.0-alpha.0.0.0, installs instead of crashing as well #453
Version 1.11.0
Fixed zsh source bin/activate aborting on the direct-call guard #398
Added check for how activate is called #384
Addressed the tarfile.extractall deprecation on Python >= 3.12 by setting filter='data', which also prevents writing files via ".." or absolute paths #380
Added support for Solaris/illumos #360
Added predeactivate hooks for Windows
Added error handling and tests for the node installation #336
Removed the leftover debug print that leaked a dict to stdout on every version detection #390
Added --with-certifi to download packages with the certifi certificate bundle #388
--node accepts npm-style semver ranges #393
Added --prefer-system to use system-wide node.js when available and install one otherwise #153
Added --isolate-npm to keep npm cache, userconfig and init-module inside the environment #154
Added tests that run the activation scripts in sh, dash, bash, zsh and fish.
-p no longer reinstalls node when the requested version is already in the virtualenv #159
Repeated -p runs no longer duplicate the predeactivate hook #159
-p accepts an optional virtualenv directory and prefers the activated VIRTUAL_ENV over the virtualenv nodeenv itself is installed in #156
-r/--requirements may now be given more than once, and the new --local-requirements installs the packages of a file locally, into "node_modules" of the current directory, which is what freeze -l writes. Under npm < 1.0.0, which has no -g, a local file is still installed the old way #206
The "src" directory is now removed after installation by default, which halves the size of an environment. Added --no-clean-src to keep it: with --source that is what lets a repeated --force build reuse the downloaded source tree #205
Documented that --mirror takes a file:// URL, so a local directory can serve as the download source #193
The posix activate is now written on Windows too, into "Scripts", so git-bash and the other posix shells there can activate an environment #226
A download that reaches nothing at all, which a broken http_proxy or https_proxy usually causes, now reports the url and the proxy settings instead of a traceback #229
On Windows -p extends "activate.bat", "deactivate.bat" and "Activate.ps1" of the python virtualenv instead of overwriting them, so VIRTUAL_ENV and the virtualenv's own deactivation survive #243
A missing node.js archive now reports the urls that were tried and points at --list and --source instead of a traceback #250
freeze now reads npm ls --parseable instead of the drawn tree: scoped packages keep their scope, a package whose name contains "npm" is no longer dropped, and npm and corepack, which come with node.js itself, are left out of the list. The fish version, which printed nothing at all under npm >= 1, now writes the same file as the posix one #287
musl is now detected whatever the vendor field of the host triplet says, so Alpine's own python3 (x86_64-alpine-linux-musl) gets the musl build of node.js instead of the glibc one #290
On Windows "nodejs.exe" is linked with os.symlink, falling back to a hard link, instead of mklink, which broke on paths with forward slashes or spaces and needs elevation or Developer Mode. If both fail, only a warning is logged #303
Version 1.10.0
Added support for Python 3.13 #367
Added support for UV virtual environments #386
Used sh instead of bash #389
Replaced the remaining which(1) calls with shutil.which() #355
Supported a leading v in .node-version #359
Checked the host platform when finding the node version #363
Fixed archmap lookup to be lowercase #382
Version 1.9.1
Version 1.9.0
Switched to packaging for version comparison #338 and then dropped the dependency in favor of a simple version-parsing function #352
Fixed GitHub Actions #347
Added Python 3.11 and 3.12 test coverage #348
Added support for shells with "set -u" #345
Replaced pipes.quote with shlex.quote on Python 3.3+ #342
Removed usage of the non-portable which #346
Version 1.8.0
Fixed the function name in fish_prompt #312
Added support for riscv64 #313
Upgraded GitHub Actions #317
Made the mock dependency optional #320
GitHub Actions: fail-fast: false #327
Made multiple attempts to download the node.js archive (IncompleteRead error) #329
Logged the URL on download failures #330
Version 1.7.0
Dropped python3.4, python3.5 and python3.6
Supported python releases before 3.7 in tests #272
Required setuptools in setup.py #289
Used the version specified in .node-version if it exists #288
Fixed the problem when used with fish and virtualenv #294
Replaced optparse with argparse #295
Set the SSL protocol when ssl certs are ignored #296
Fixed tests, tested Python 3.10 and moved tests to GitHub Actions #298
Patched node installation for M1 #299
Added ability to configure the mirror through the settings file #307
Added --with-npm to README #308
Version 1.6.0
Tested for nodejs or node in tests #270
Removed the main node.js mirror in tests if musl #271
Fixed the nodeenv prompt when using Fish #273
Used node instead of nodejs #275
Fixed typo, remaning -> remaining #276
Resolved the venv dir for Fish #277
Added support for installing the latest LTS release #281
Created a broad mapping for M1 #282
Version 1.5.0
Version 1.4.0
Switched to /download/release/index.json to discover versions
Dropped io.js support
Worked around IncompleteRead when downloading src #258
Fixed erasing of NODE_VIRTUAL_ENV while deactivate_node in fish #255
Accepted a URL as well as a domain name for the --mirror argument #252
Downloaded musl-compatible node from unofficial-builds #247
Version 1.3.5
Fixed error 183 ("already exists") on Windows when installing prebuilt node #249
Version 1.3.4
Used the prebuilt windows zip which contains npm #230
Fixed url in the CHANGES file #231
Fixed escape sequences #232
Fixed npm_url in install_npm_win #233
Changed the URL for downloading npm in Cygwin #234
Fixed nodeenv in case python4 is ever a thing #241
Produced py2.py3 wheels, nodeenv is a pure python package #242
Printed a blank line when install_node fails #236
Added an option to set your own mirror #208
Fixed CI (flake8 errors) #245
Fixed call to logger.info(...) #246
Version 1.3.3
Installed a certain npm version via npm install #225
Version 1.3.2
Version 1.3.1
Version 1.3.0
Version 1.2.0
Version 1.1.4
Fixed directory copy #188
Version 1.1.3
Fixed spaces in paths #187
Version 1.1.2
Fixed MANIFEST.in #184
Version 1.1.1
Version 1.1.0
Windows support
Version 1.0.0
Version 0.13.6
Use https for nodejs.org. See # 129
Version 0.13.5
Improved user-agent identification
Version 0.13.4
Version 0.13.3
Version 0.13.2
Fixed freeze command. See # 121
Version 0.13.1
Version 0.13.0
Version 0.12.3
Fixed check for installed curl/tar/etc for py3.
Version 0.12.2
Version 0.12.1
Version 0.12.0
Added support for io.js (new option --iojs)
Fixed get_last_stable_node_version for python3
Version 0.11.1
Version 0.11.0
Version 0.10.0
Version 0.9.6
Version 0.9.5
Fixed a few spelling typos in README. See # 74
Fixed example of using --update option in README. See # 74
Improved args passing into shim script. See # 75
Try to find nodejs if used system-wide node as well. See # 76
Added assert if used system-wide node and it wasnt found. See # 76
Added -l option into freeze command. See # 71
Version 0.9.4
Fixed support for python2.6. See # 70
Version 0.9.3
Version 0.9.2
Fixed infinite loop when system-wide node used. See # 67
Version 0.9.1
Fixed 'shim' script if used system-wide node
Fixed shebang in the 'shim'
Added shim with name 'node' in case of using system-wide node
Version 0.9.0
Added shim script. See # 59
Version 0.8.2
Version 0.8.1
Fixed system's node usage. See # 62
Version 0.8.0
Version 0.7.3
Version 0.7.2
Bug fixing in freeze. See # 47
Version 0.7.1
Added --make option
Version 0.7.0
Version 0.6.6
Version 0.6.5
Node's source not loaded if it already exists in FS.
Version 0.6.4
Added python3 compatibility. See # 32
Version 0.6.3
Fixed nodeenv -p. See issue # 31
Version 0.6.2
Version 0.6.1
Used pkg_resources.parse_version to compare versions. See pull # 29
Fixed doubling prompt inside a virtualenv. See issues # 26
Version 0.6.0
Version 0.5.3
Bug fix. Used https, /dist/latest/. See pull # 16
Version 0.5.2
Improved installation logic for release candidate versions. See pull # 10
Version 0.5.1
Improved logic for the option '--without-npm'. See issue # 14, pull # 15
Version 0.5.0
The virtual environment's path is no longer hardcoded into the activation script. See pull # 13
Version 0.4.3
Fixed metavar for --npm
npm install -g used for npm >=1.0, not noly for latest
Version 0.4.2
Added README.ru.rst
Version 0.4.1
Fixed bug in print_node_versions. See pull # 11
Added deps in README
Version 0.4.0
Version 0.3.10
Fixed bug in url detection for node.js download
Version 0.3.9
Version 0.3.8
Added NODE_PATH variable export (for correct module search after installation via npm)
Version 0.3.7
Shows command output when error occurs
Excluded 'npm' from freeze list
Fixed bug with 'not only letter' names in freeze list
Added global installation for npm >= 1.0 (when install soft from requirement file)
Version 0.3.6
Fixed freeze output command. See request # 5
Diagnostic message fixed. See pull # 4
Version 0.3.5
Added option --npm to install certain npm.js version. Request .
Fixed freeze command for npm >= 1.0.x.
Version 0.3.4
Fixed problem #2 with new npm installation script. Added --no-npm-clean option. The default to the npm 0.x cleanup.
Version 0.3.3
Fixed problem #1 with installation from PyPI via easy_install. Added MANIFEST.in file.
Version 0.3.2
Internal improvements
Logging refactoring
Version 0.3.1
Default environment promt is folder name
Version 0.3.0
Renamed nve to nodeenv