SWI-Prolog 8.4.0 Reference Manual: Section A.37

## A.37 library(prolog_pack): A package manager for Prolog

See also
  Installed packages can be inspected using `?- doc_browser.`
To be done
  - Version logic
  - Find and resolve conflicts
  - Upgrade git packages
  - Validate git packages
  - Test packages: run tests from directory‘test'.

The `library(prolog_pack)` provides the SWI-Prolog package manager. This library lets you inspect installed packages, install packages, remove packages, etc. It is complemented by the built-in attach_packs/0 that makes installed packages available as libraries.

[det]pack_list_installed
  List currently installed packages. Unlike pack_list/1, only locally installed packages are displayed and no connection is made to the internet.
  See also
    Use pack_list/1 to find packages.
pack_info(+Pack)
  Print more detailed information about Pack.
[det]pack_search(+Query)
[det]pack_list(+Query)
  Query package server and installed packages and display results. Query is matches case-insensitively against the name and title of known and installed packages. For each matching package, a single line is displayed that provides:

  - Installation status

    - p: package, not installed
    - i: installed package; up-to-date with public version
    - U: installed package; can be upgraded
    - A: installed package; newer than publically available
    - l: installed package; not on server

  - Name@Version
  - Name@Version(ServerVersion)
  - Title

  Hint: `?- pack_list('').` lists all packages.

  The predicates pack_list/1 and pack_search/1 are synonyms. Both contact the package server at http://www.swi-prolog.org to find available packages.

  See also
    pack_list_installed/0 to list installed packages without contacting the server.
[det]pack_install(+Spec:atom)
  Install a package. Spec is one of

  - Archive file name
  - HTTP URL of an archive file name. This URL may contain a star (*) for the version. In this case pack_install asks for the directory content and selects the latest version.
  - GIT URL (not well supported yet)
  - A local directory name given as `file://` URL.
  - A package name. This queries the package repository at http://www.swi-prolog.org

  After resolving the type of package, pack_install/2 is used to do the actual installation.

[det]pack_install(+Name, +Options)
  Install package Name. Processes the options below. Default options as would be used by pack_install/1 are used to complete the provided Options.
  url(+URL)
    Source for downloading the package
  package_directory(+Dir)
    Directory into which to install the package
  interactive(+Boolean)
    Use default answer without asking the user if there is a default action.
  silent(+Boolean)
    If `true` (default false), suppress informational progress messages.
  upgrade(+Boolean)
    If `true` (default `false`), upgrade package if it is already installed.
  git(+Boolean)
    If `true` (default `false` unless URL ends with =.git=), assume the URL is a GIT repository.

  Non-interactive installation can be established using the option `interactive(false)`. It is adviced to install from a particular trusted URL instead of the plain pack name for unattented operation.

[det]pack_url_file(+URL, -File)
  True if File is a unique id for the referenced pack and version. Normally, that is simply the base name, but GitHub archives destroy this picture. Needed by the pack manager.
ssl_verify(+SSL, +ProblemCert, +AllCerts, +FirstCert, +Error)
  Currently we accept all certificates. We organise our own security using SHA1 signatures, so we do not care about the source of the data.
[det]pack_rebuild(+Pack)
  Rebuilt possible foreign components of Pack.
[det]pack_rebuild
  Rebuild foreign components of all packages.
[nondet,multifile]environment(-Name, -Value)
  Hook to define the environment for building packs. This Multifile hook extends the process environment for building foreign extensions. A value provided by this hook overrules defaults provided by def_environment/2. In addition to changing the environment, this may be used to pass additional values to the environment, as in:

      prolog_pack:environment('USER', User) :-
          getenv('USER', User).

  Name | is an atom denoting a valid variable name
  Value | is either an atom or number representing the value of the variable.

[semidet]pack_upgrade(+Pack)
  Try to upgrade the package Pack.
  To be done
    Update dependencies when updating a pack from git?
[det]pack_remove(+Name)
  Remove the indicated package.
[nondet]pack_property(?Pack, ?Property)
  True when Property is a property of an installed Pack. This interface is intended for programs that wish to interact with the package manager. Defined properties are:
  directory(Directory)
    Directory into which the package is installed
  version(Version)
    Installed version
  title(Title)
    Full title of the package
  author(Author)
    Registered author
  download(URL)
    Official download URL
  readme(File)
    Package `README` file (if present)
  todo(File)
    Package `TODO` file (if present)
atom_version(?Atom, ?Version)
  Translate between atomic version representation and term representation. The term representation is a list of version components as integers and can be compared using `@>`
[det]pack_attach(+Dir, +Options)
  Attach a single package in Dir. The Dir is expected to contain the file `pack.pl` and a `prolog` directory. Options processed:
  duplicate(+Action)
    What to do if the same package is already installed in a different directory. Action is one of
    warning
      Warn and ignore the package
    keep
      Silently ignore the package
    replace
      Unregister the existing and insert the new package
  search(+Where)
    Determines the order of searching package library directories. Default is `last`, alternative is `first`.
  See also
    attach_packs/2 to attach multiple packs from a directory.