Node.py
Context.__enter__()
should return selfnodepy.print_exc()
now tolerates sys.stderr
not having an isatty()
memberimport * from 'module-name'
syntax with !require-import-syntax
extension# nodepy-extensions: ...
special comment in Python file headersContext.enter_module()
now catches potential ValueError
when removing
a path from sys.path
ExtensionHandlerRunner
class and the way extensions are invokedBaseModule.extensions
propertyPackage.get_extensions()
with Package.extensions
member-L,--loader
option since Context.get_loader()
was changedContext._get_package()
to Context.get_package()
(now public)Context._get_package_main()
to Context.get_package_main()
(now public)Context.get_package_for()
Context.resolve()
, Context.load_module()
and Context.resolve_and_load()
drasticallyBaseResolver
classBaseLoader
classFilesystemResolver
classFilesystemLoaderSupport
classPythonFilesystemLoaderSupport
classJsonFilesystemLoaderSupport
classPythonLoader
classJsonLoader
classRequest
classBaseModule.parent
member and turn it into a property, since the
parent module is now contained in the BaseModule.request
objectBaseModule.request
is now a Request
object instead of a stringRequest.followed_from
with Request.original_resolve_location
FilesystemResolver.cache
which helps enhance performance by about 5%
(was hoping for more..)-d,--debug
option can now be set to True with the environment variable
NODEPY_DEBUG=true
vendor-directories
in package manifestnodepy.normpath()
Context._package_stack
import default_member, * from 'module-name'
syntaxnodepy.notebook_context()
functionContext.options
, and first option being supported is require.autoreload
BaseModule
interfaceexec_mtime
memberreload()
methodexec_()
must now be called by subclassessource_changed
propertyPythonLoader
so that PythonModule.reload()
actually works and does
not execute the old codenodepy.script
member which will initialized by scripts that are
installed via NPPMnodepy.reload_pkg_resources(name='pkg_resources')
require-import-syntax
extension now supports assigning imported names as
members to existing objects in the scopenppm
nppm version
command@nodepy/nppm/lib/env:get_module_dist_info()
-- Added keys .dist-info
and top_level
to the returned dictionary-e,--develop
option now requires a PACKAGE
argument-U,--upgrade
is now passed on to Pip-e
option-py,--python
and -epy,--develop-python
arguments in faviour of
the py/
package prefixnodepy_modules/.pip
, even for -g,--global
and --root
installationsnppm dirs
command-py
argument are now passed directly to the Pip command-lineNameError: FileNotFoundError
in nppm
on Python 2configparser.SafeConfigParser
-F,--from
option to nppm install
REGISTRY
argument to nppm register
--to
option to nppm upload
and nppm publish
vendor-directories
in package manifestPYTHONPATH
ScriptMaker
now requires a location
parameternppm install
with no arguments will now install the current directory in
develop mode (thus, as a package links), including programs specified in
the manifest's "bin"
fieldnodepy
nodepy.proc_args
to contain sys.executable
if the nodepy executable
is not an .exe
on WindowsContext.loaders
and Context.get_loader()
errno
module (causes exception when bytecache file
can not be written due to eg. permission errors)colorama.init()
if the colorama module is available.
If not, and the current platform is Windows, colorized traceback output
is disabled.require('./package.json')
or with any other JSON file"main"
field in package.json
"extensions"
field to package.json
, currently supported extension
event callbacks are init_extension()
and module_loaded()
package.json
through its BaseModule.package
member.-v,--verbose
option and Context.debug()
for now, needs to be
reimplemented completely with actually useful and well formatted informationContext.binding()
now raises a NoSuchBindingError
require()
requests beginning with an !
(exclamation mark) will be
forwarded to Context.binding()
(without the exclamation mark)require-unpack-syntax
binding to Context
class, which can be added
to the extensions listed in a package.json
manifestrequire-import-syntax
binding to Context
class, which can be added
to the extensions listed in a package.json
manifestnodepy --version
now prints Python implementation name--profile FILENAME
argument that will save a profile of the execution
to the specified file.pkg_resources
module when the Node.py Context
exits, when another module has changed or reloaded the module already.wheel
as a dependency for Node.py--isolated
command-line option (not usually necessary)nppm run
can now invoke programs in the nearest nodepy_modules/
directory if the command is not already captured by a script defined
in the package manifestnodepy internal
Context.register_extension()
and Context.get_extension()
BaseModule.real_filename
as BaseModule.filename
must always match
the filename that was passed into the loader (otherwise BaseModule.remove()
does not work)JsonLoader
classPythonLoader(support_require_unpack_syntax)
argumentnodepy.get_python_library_base()
and nodepy.get_python_library_path()
nodepy.get_site_packages()
insteadnodepy.Package
classContext._package_cache
member, Context._get_package()
functionBaseModule.package
member and parameter to constructorBaseLoader.load(package)
parameterNoSuchBindingError
classRequireUnpackSyntaxExtension
class and require-unpack-syntax
bindingRequireImportSyntaxExtension
class and require-import-syntax
bindingnodepy.python_impl
memberContext(isolated=True)
parameterContext.init
member (an instance of InitModule
)nppm (PPYM post v0.0.17)
lib/brewfix.py
which temporarily (over)writes ~/.pydistutils.cfg
,
only fixes --user
installs of Node.py (and installs in Virtualenv still
work flawlessly, too)ppym install --save
saving version as ^VERSION
which is wrong,
now uses ~VERSION
env:get_module_dist_info()
replacing hyphens by underscores, as Pip
does it.dist-info
pip.locations.distutils_scheme()
distlib
from pip._vendor
if it can't be imported as is-v,--verbose
option to ppym install
--root
and -g,--global
should now
be consistent with Pip's default behaviour with the respective installation
modes (pip install
and pip install --user
)prefix
is no longer used, (root/global) Node.py
modules are now installed nearby Python's site-packages
and Scripts
are placed into Python's script directoryrun
command now executes !
scripts with $SHELL
completely unprocessedpre-script
no longer recieves the arguments of the script that is being invoked"main"
and the require-unpack-syntax
and
require-import-syntax
extensions nppm init
--save-ext
option to nppm install
commandnode.py
program name for nodepy
node.py-X.Y
name for setup()
where X.Y
is the
Python major and minor version number, to avoid conflicts when installing to
multiple installationsRequire.PY2
and Require.PY3
require.symbols(request, symbols=None)
to selectively import symbols
from another module-c
argumentnodepy_modules/
directory is close to a Node.py module, not only
Node.py dependencies will be searched in this directory also Python modules
can be found in it as well (from the .pip
directory). Note that unlike for
Node.py modules, the farthest nodepy_modules/.pip
directory takes precedence
when importing a Python module and that they are not unique for the scope
of that module's nearest nodepy_modules/
directory, and instead will be
available globally even after the Node.py modules was loaded.nodepy.proc_args
and nodepy.executable
data membersrequire.subprocess()
functionrequire.subprocess_args()
function-L,--loader
argument to nodepy
command-linerequire(loader=None)
argumentnodepy
interactive banner now shows the Python maxsize (usually 32 or 64)BaseModule.remove()
methodInteractiveSessionModule
to InitModule
-P,--preload
optionnodepy.get_python_library_path()
doraise=True
to py_compile.compile()
call--pymain
optionclick
before altering sys.argv
if possiblerequire(into)
parameterrequire('.')
and require('..')
being resolved in the PATH rather
then relative to the current directoryBaseModule.parent
and BaseModule.request
Context.event_handlers
and Context.send_event()
load
, require
and enter
are now sent via Context.event_handlers
Require.cache
'__init__'
to Context.index_files
, 'index'
might get deprecated
in the futurecode
)node.py
command for the Python
version, eg. node.py3
and node.py3.5
for Python 3.5Context.resolve(followed_from)
and Context.load_module(followed_from)
Context.resolve_and_load()
which automatically adds an element to
Require.path
for package linksRequire.path
BaseModule.require
UnknownModuleTypeError
for now, Context.load_module()
now raises
a ValueError
if no loader could be determinedContext(bare=False)
parameterNodepyModule
to PythonModule
NodepyByteModule
PythonModule(code)
parameterget_python_library_base()
_py_loader()
function with PythonLoader
classPythonLoader
class now writes a bytecache from the source file if
PYTHONDONTWRITEBYTECODE
is not setResolveError
require()
no longer inherit Node.py's future flagssetup.py
installs PPYM into user directory if Node.py is installed
into user directory--keep-arg0
argument to node.py
, which is used when PPYM installs
a command-line scriptContext.load_module()
now accepts an explicit loader
argumentContext.get_extension()
Context.current_modules
nodepy_modules/
directory to Context.path
Require.hide_main()
exports
argument to Require.__call__()
Context.register_index_file()
nodepy.Directories
class again, we only need to compute the
local nodepy_modules/.pip
library directoryContext
no longer adds to PATH
setup.py
no longer installs PPYM dependenciesinstall_deps()
to setup.py
, we need to make sure our
dependencies are installed before PPYM can be bootstrappedRequire.__call__(current_dir=None, is_main=False, cache=True)
arguments\Require.exec_module()
methodSession.load_module(cache=True)
argumentDirectories
class which generates the paths to look for Python modules
installed via Pip through PPYM and moreContext
now adds the local nodepy_modules/.bin
directory to the PATH
environment variable.cpython-XY.pyc
.py
loader now loads the respective bytecache file if appropriateContext.register_binding()
now accepts arbitrary objects, not just
BaseModule
instancesrequire.current
and Context.current_module
properties.nodepy-link
files as created by ppym install -e
-v, --verbose
argument for debug prints when resolving module filenamesargparse
instead of click
due to problem with known arguments
being consumed and not passed to the Node.py main modulesetup.py develop
now passes --develop
to ppym/bootstrap
setup.py
-- Fix creation of node.py
script on Windows by hooking
distlib.scripts.ScriptMaker
(see issue #11)require.main
property can now be setsetup.py
now always upgrades to the bundled PPYM installation