Release Notes¶
2.4.1¶
21 May 2021- fixed
Fixed
qip.definition.fetch_custom()
to prevent systematically overwriting identifier from custom definitions.
2.4.0¶
20 May 2021- new
Added Optional dependencies.
- changed
Updated
qip.definition.fetch_custom()
to always override identifier and version keywords with accurate information from the Python package. It means that it is no longer compulsory to add the identifier to custom definitions. - changed
Updated
qip.definition.fetch_custom()
to look for custom definitions matching extra keywords provided in the request. - changed
Updated Custom Wiz definition.
- fixed
Updated
qip.definition.update()
to better combine additional variants with variants found in custom Wiz definition.
2.3.0¶
30 March 2021- changed
Updated
qip.package.extract_identifier()
to compute unique identifier which includes extra keywords provided in the request. This ensures that packages installed with optional dependencies do not overwrite existing packages installed without optional dependencies or with different optional dependencies. - changed
Added
qip.package.extract_key()
to compute unique package key which includes extra keywords provided in the request. As package key is used to compute identifier of the corresponding Wiz definition, it ensures that definitions installed with optional dependencies do not overwrite existing definitions installed without optional dependencies or with different optional dependencies. - changed
Updated
qip.package.extract_command_mapping()
to extract commands from functions defined asconsole_scripts
based on provided extra requirement keywords - changed
Updated
qip.package.install()
to properly convert private Git URLs fromgit@host:group/project.git
togit+ssh://host/group/git+ssh://
.See also
2.2.0¶
4 November 20202.1.1¶
28 September 2020- fixed
Updated
qip.install()
to prevent skipping installation when editable mode is used, even if a package version is found in Wiz registries.See also
2.1.0¶
26 September 2020- changed
command-lineUpdated installation process to automatically include default Wiz registries to determine whether the installation of a Python package should be skipped or if its definition should be updated.
Added
-I/--ignore-registries
to ignore default Wiz registries. - changed
APIUpdated
qip.install()
to handle the process of fetching a definition mapping from registry paths. It spares the user from having to fetch definition mapping and makes the usage simpler. - changed
APIUpdated
qip.install()
to skip installation when a package version is found in Wiz registries. - new
command-lineAdded
qip install -R/--continue-on-error
to resume the installation process when a package fails to install. By default, an error is raised. - changed
APIUpdated
qip.install()
with continue_on_error option to indicate whether installation process should resume when a package fails to install. Default is False. - new
APIAdded
qip.definition.fetch_existing()
to fetch a Python package in a definition mapping. - changed
APIRenamed
qip.definition.retrieve()
toqip.definition.fetch_custom()
for consistency withqip.definition.fetch_existing()
. - fixed
APIFixed
qip.install()
to applyeditable_mode
for all incoming requests. Previously, it would only apply to the first request.
2.0.2¶
15 September 2020- fixed
Updated
qip.definition.export()
to target specific package version when retrieving additional variants which will be included in the definition to export.
2.0.1¶
14 September 2020- new
Added configuration to run unit tests on Travis
- new
Added configuration to build documentation on ReadTheDocs
2.0.0¶
14 September 2020- changed
Project name has been changed to
qip-installer
to guarantee a unique name on PyPi. - changed
Updated dependency to the major version 3 of Wiz.
- changed
Updated the following modules to add compatibility with python 3.7 and 3.8:
- new
Added following short options:
- changed
Updated Command line so that default values can be defined using Wiz configuration file.
See also
- changed
Updated default value for
-p/--python
to use currentPython executable
instead of “python==2.7.*”. - fixed
Updated
qip.environ.fetch()
to link Python executable into an isolated temporary folder before using it and create an additional “python” symlink if needed. It is to ensure that no other Python executables installed in the same location is being accidentally picked up. - changed
Removed
qip.filesystem
andqip.symbol
and use logic fromwiz.filesystem
andwiz.symbol
instead. - changed
Removed
mlog
dependency and addedqip.logging
usingsawmill
directly to have more flexibility to configure theqip.logging.Logger
instance. - changed
Updated repository to use versup the help with the release process.
1.8.1¶
1 April 2020- fixed
Updated
qip.package.install()
andqip.package.fetch_mapping_from_environ()
to execute Pip commands with python -m pip instead of using the execution wrapper. Previously, it was picking up local version of the Pip execution wrapper instead of using the one installed within the Python resolved environment.
1.8.0¶
4 April 2019- changed
Updated
qip.install()
to continue installing required packages even if the parent package is skipped during thecopy process
. - fixed
Updated
qip.install()
to always clear the content of the temporary installation directory before installing a package. Previously, the temporary installation directory would be cleared after the installation, but this step would be skipped is the package installation was discarded. - fixed
Updated
qip.package.install()
to use quotes when creating the Pip subprocess command with the request. Previously it would fail to process a request with spaces (e.g. ‘foo >= 1, < 2’). - fixed
Updated logging to avoid prints about a package being installed when it is actually being discarded.
1.7.0¶
3 April 2019- changed
definitionUpdated
qip.definition.retrieve()
to fetch custom Wiz definition from the package installation location:<location>/foo/package_data/wiz.json
Previously, it was assumed that the
wiz.json
file would be located outside of the source (inshare/wiz/wiz.json
), but it was impossible to distribute within a wheel distribution. - changed
APIbackwards-incompatibleUpdated
qip.definition.export()
to remove the now redundant “package_path” option. - changed
APIbackwards-incompatibleUpdated
qip.definition.retrieve()
to remove the now redundant “path” option.
1.6.0¶
1 April 2019- changed
APIUpdated
qip.definition.update()
to append previousPYTHONPATH
value toINSTALL_LOCATION
when updating the package definition.
1.5.0¶
1 April 2019- changed
definitionUpdated
qip.definition.create()
andqip.definition.update()
to always add ‘library’ namespace to required Python packages fetched from the setup.py configuration file. Previously the extracted package was ambiguously named in the resulting package definition, which could lead Wiz to not be able to resolve it properly - changed
APIUpdated
qip.definition.update()
to addPYTHONPATH
to the definition environment mapping in order to include the installed package.
1.4.0¶
28 March 2019- changed
APIUpdated
qip.definition.create()
andqip.definition.update()
to add dependent Python packages as requirements which target the same Python version variant (e.g. “foo[2.7]”). Previously, calling a package installed for several Python versions from Wiz could take a long time as all variants would be tested in the resolution graph.
1.3.0¶
26 March 2019- new
command-lineAdded
qip install --python
to target a specific Python version via a Wiz request or a path to a Python executable. - new
command-lineAdded
qip install --update
to update Wiz definition(s) that already exist in the Wiz definitions output path with additional Python variants - new
APIAdded
qip.environ.fetch_python_mapping()
to fetch information related to the Python version used within the environmentfetched
.A
qip.package_data.python_info
script is run within a subprocess to ensure that the Python version used by Qip could be different than the one used for the installation. - new
APIAdded
qip.fetch_context_mapping()
to regroup all environment variablesfetched
and a mapping containing information about the Python version within a context mapping that can used during the installation process.The
PYTHONPATH
environment variable is set to target thesite-packages
directory within the package installation path. - new
APIAdded
qip.definition.export()
to create and export a Wiz definition for a specific Python package installed. - new
APIAdded
qip.package.is_system_required()
to indicate whether a Python package is platform-specific. The logic was previously included inqip.package.extract_metadata_mapping()
which has now been removed. - new
APIAdded
qip.package.extract_command_mapping()
to retrieve all commands from a Python package. The logic was previously included inqip.package.extract_metadata_mapping()
which has now been removed. - new
APIAdded
qip.package.extract_target_path()
to always build the package folder destination with Python major and minor version in order to prevent names clashes. The logic was previously included inqip.package.fetch_mapping_from_environ()
. - changed
APIbackwards-incompatibleUpdated
qip.definition
to embed environment and requirements keywords within a variant which is targeting the Python minor version that was used for the package installation.When a package is installed for another Python version, a new variant will be added if required. When a
Definition
instance has several variants, it will be sorted to have the highest Python version first, provided that the Python version is being used as a variant identifier. - changed
APIbackwards-incompatibleMove
qip.fetch_environ()
toqip.environ.fetch()
and add a “python_target” argument in order to target a specific Python version via a Wiz request or a path to a Python executable. - changed
APIbackwards-incompatibleUpdated
qip.definition.retrieve()
to return aDefinition
instance from awiz.json
found in the Python package installation path without updating it as it was previously the case.The definition update is now handled by
qip.definition.update()
. - changed
APIbackwards-incompatibleRemoved
qip.package.extract_metadata_mapping()
and moved logic withinqip.package.fetch_mapping_from_environ()
instead for clarity. - changed
APIbackwards-incompatibleRename
qip.package_data.pip_query
toqip.package_data.package_info
for consistency. - changed
command-lineExplicitly set the name of the program to “qip” instead of relying on
sys.argv
in order to prevent “__main__.py” to be displayed when the command is being run as follows:python -m qip --help
1.2.1¶
4 February 2019- fixed
Removed unnecessary sphinxcontrib-autoprogram dependency.
1.2.0¶
4 February 2019- new
documentationAdded Python Development section.
- changed
definitionUpdated
qip.definition
to add install-root and install-location values when creating or retrieving a definition.When installing a package via the command line, the install-root value is being set by the
qip install --output-path
command. In editable mode, no install-root value is added.The install-location value is being set to the actual python package location and is relative to the install-root value. In editable mode, that path is pointing at the source to ease development without having to reinstall the package.
When retrieving a definition, it is being assumed that the developer has set a
PYTHONPATH
environment variable referencingINSTALL_LOCATION
in either environ or in a variant of the definition. It is NOT being added automatically, to ensure that the developer remains full control over the path order.Example:
{ "environ": { "PYTHONPATH": "${INSTALL_LOCATION}:${PYTHONPATH}" } }
- changed
packageUpdated
qip.package.extract_dependency_mapping()
to useqip.package_data.pip_query
to extract package dependency instead of pipdeptree so that extra requirements are taken into account (e.g. ‘foo[dev]’). - changed
packageUpdated
qip.package.extract_metadata_mapping()
to retrieve entry points from package to use as command aliases in the exported definitions (e.g. “python -m foo”). - changed
definitionUpdated
qip.definition
to use entry point python calls instead of executables to update command value. When retrieving a definition, the command aliases defined by the developer are preserved, but missing entry points are being added, if available. - changed
definitionUpdated
qip.definition
to update requirements when retrieving a definition. Any requirements in the retrieved definitions are extended to ensure that the developer can add requirements that are not in the setup.py configuration file (e.g. “maya”, “nuke”, etc) - changed
command-lineChanged
qip install --output-path
andqip install --definition-path
to default to temporary directories when no input has been specified. - changed
Updated
qip.install()
andqip.copy_to_destination()
to add a ‘Yes to all’ and ‘No to all’ options to the package confirmation prompt. The user can now decide to be asked for confirmation once for the overwriting process and apply the given value to all future packages. - changed
Enforced the request name in lower case, to make sure any packages with upper or camel case are taken into account, similar to pip.
1.1.1¶
25 October 2018- fixed
Fixed
qip.install()
to always overwrite the Wiz package definition when the package is being overwritten for consistency.
1.1.0¶
24 October 2018- new
command-lineAdded
qip install --editable
to install local projects or VCS projects in editable mode. - new
command-lineAdded
qip install --definition-path
to define a destination path for the Wiz definitions created. No definitions are extracted if this option is missing. - new
definitionAdded ‘install-location’ keyword when retrieving a definition from a package, if
INSTALL_LOCATION
is used in any occurrence ofenviron
. - new
definitionAdded ‘group’ keyword set to “python” when creating new definitions for packages from PyPi.
- new
definitionAdded
qip.definition._update_install_location()
to ensure that when retrieving a definition from a package, any occurrence ofINSTALL_LOCATION
in a definition is being replaced with the accurate relative target path (including the identifier, version and potential system information). Without this adjustment, any path inINSTALL_LOCATION
retrieved from Devpi would include non existent paths and the link to the data would be lost. - new
APIAdded
qip.symbol
to group common symbols. - changed
command-lineRenamed
qip install --output
toqip install --output-path
for consistency. - changed
APIUpdated
qip.install()
to add a ‘editable_mode’ argument which installs the first package in editable mode. - changed
APIUpdated
qip.install()
to add a ‘definition_path’ argument which defines a destination for Wiz definition extracted. No definitions are extracted if this argument is missing. - changed
APIUpdated
qip.package.install()
to add a ‘editable_mode’ argument which installs the package in editable mode. - changed
APIChanged
qip.definition.create()
to modify the installation prefix from${INSTALL_LOCATION}
to${INSTALL_LOCATION}/<package_name>/<package_identifier>
- fixed
APIFixed
qip.install()
to record package identifiers and requests before processing it. It ensures that no package is processed more than once even if the installation process is skipped.
1.0.0¶
16 October 2018- new
Retrieve a Wiz definition from an installed package, if there was one bundled with it.
Any python package exporting a wiz.json to a shared location /share/package-name/ on install, will cause Qip to _not_ create a new Wiz definition from scratch. Instead the bundled definition will be renamed (ie. foo-0.1.0.json) and copied to the install location.
There are no changes made to a retrieved Wiz definition. Any dependencies or system information will have to be correct when the package gets bundled and uploaded to Devpi.
- new
Write out a Wiz definition into package directories, describing the system requirements, name, description, version and possible requirements that package has. The file will be in the same directory as the install and be called after the package, ie. foo-0.1.0.json
See also
The format is a normal Wiz Package Definition.
- new
Rewrite of qip functionality. Only installs packages locally.
0.1.0¶
21 May 2021- new
Initial release.