Adding pre-link, post-link, and pre-unlink scripts
You can add scripts to a recipe. They must be located in the same directory as the meta.yaml file. The following scripts can be added:
pre-link
---Executed before the package is installed. An error is indicated by a nonzero exit and causes conda to stop and causes the installation to fail.post-link
---Executed after the package is installed. An error is indicated by a nonzero exist and causes installation to fail. If there is an error, conda does not write any package metadata.pre-unlink
---Executed before the package is removed. An error is indicated by a nonzero exist and causes the removal to fail.
In addition to being co-located with the meta.yaml file, they must be named simply post-link.sh
or post-link.bat
. Conda-build will rename them to .<name>-<action>.sh (or .bat) where <name>
is the package name and <action>
is one of the preceeding actions.
These scripts are executed in a subprocess by
conda, using %COMSPEC% /c <script>
on Windows and
/bin/bash <script>
on macOS and Linux.
The convention for the path and filenames of these scripts on Windows is:
Scripts/.<name>-<action>.bat
On Linux and macOS the convention is:
bin/.<name>-<action>.sh
The scripts set the following environment variables:
PREFIX |
The install prefix. |
PKG_NAME |
The name of the package. |
PKG_VERSION |
The version of the package. |
PKG_BUILDNUM |
The build number of the package. |
The scripts are:
Windows:
pre-link.bat
post-link.bat
pre-unlink.bat
macOS and Linux:
pre-link.sh
post-link.sh
pre-unlink.sh
Post-link and pre-unlink scripts should:
Be avoided whenever possible.
Not touch anything other than the files being installed.
Not write anything to stdout or stderr, unless an error occurs.
Not depend on any installed or to-be-installed conda packages.
Depend only on simple system tools such as
rm
,cp
,mv
, andln
.
The scripts should not write to stdout or stderr unless an error occurs, but
they may write to $PREFIX/.messages.txt
, which is shown after conda
completes all actions.