Comment puis-je héberger mon propre référentiel conda privé?
J'ai quelques projets python qui dépendent les uns des autres. J'ai différentes versions de version pour chaque projet et différents projets peuvent dépendre de différentes versions de version d'un projet particulier. Je souhaite créer mon propre référentiel conda sur un serveur interne sur lequel je peux transférer les versions de ces projets sous forme de packages conda et les autres projets peuvent installer la version requise à partir de là. Est-ce possible? Si c'est le cas, comment?
Vous pouvez utiliser un canal personnalisé conda comme référentiel privé. Les étapes essentielles consistent à utiliser "conda build" pour créer un conda-package, puis à le copier dans votre canal personnalisé (un répertoire), puis à exécuter le conda-index sur ce répertoire. Vous pouvez ensuite installer des packages à partir de ce canal en utilisant "conda install -c".
Un exemple, plus en détail, supposons que linux-64:
- Créer le canal:
mkdir -p /tmp/my-conda-channel/linux-64
Supposons maintenant que vous avez un projet nommé "abc" avec un méta.yaml et build.sh avec une version X. Maintenant, vous le construisez:
conda build abc
Cela créera un fichier tar.bz2 dans votre répertoire conda-bld. Par exemple: ~/miniconda3/conda-bld/linux-64/abc-X-py35_0.tar.bz2. Copiez ce fichier sur votre chaîne:
cp ~/miniconda3/conda-bld/linux-64/abc-X-py35_0.tar.bz2 /tmp/my-conda-channel/linux-64/
Maintenant indexez-le:
conda index /tmp/my-conda-channel/linux-64/
Vous avez maintenant téléchargé ce package sur votre chaîne personnalisée. Vous pouvez l'installer dans n'importe quel environnement conda en procédant comme suit:
conda install -c file://tmp/my-conda-channel/ abc=X
Là où, rappelons-le, le X est la version, vous pouvez installer des versions spécifiques une fois que vous avez placé plusieurs versions dans votre canal.
Si vous avez un projet qui dépend de la version X de "abc", nous l'ajoutons simplement à ce projet meta.yaml. Exemple:
package:
name: some-other-project
version: 0.1
requirements:
build:
- abc X
...
Une fois que vous avez créé ce canal, c'est probablement une bonne idée de l'ajouter à votre fichier .condarc afin qu'il soit automatiquement recherché. Par exemple:
channels:
- file://tmp/my-conda-channel/
- defaults
Cela comporte deux parties: comment créer le canal et comment l’utiliser. La deuxième partie est la plus difficile à faire.
La première partie est décrite en détail dans conda documentation . Vous pouvez servir le canal directement à partir de fichiers ou via un serveur Web statique.
Pour utiliser le canal, une approche est le -c file://tmp/my-conda-channel/
, mais les versions récentes de conda permettent une bien meilleure solution via custom channels qui (où récemment a été ajouté à conda).
La documentation est disponible via conda config --describe
qui comprend cette partie:
# custom_channels (map: str)
# A map of key-value pairs where the key is a channel name and the value
# is a channel location. Channels defined here override the default
# 'channel_alias' value. The channel name (key) is not included in the
# channel location (value). For example, to override the location of
# the 'conda-forge' channel where the url to repodata is
# https://anaconda-repo.dev/packages/conda-forge/linux-64/repodata.json,
# add an entry 'conda-forge: https://anaconda-repo.dev/packages'.
#
# custom_channels: {}
La syntaxe pour l'ajout d'un canal n'est pas documentée, mais en lisant la source l'appel correct apparaît comme suit:
conda --set custom_channels.my-conda-channel file://tmp/
(Remarque: my-conda-channel/
ne fait pas partie du chemin) . Avec ceci ajouté à votre configuration, vous pouvez maintenant utiliser votre propre canal de la même manière que vous le feriez avec conda-forge
ou d'autres canaux intégrés:
conda install -c my-conda-channel my-cool-package
Pour toute personne utilisant un paramètre MS Windows, le jeu correct de barres obliques et de barres obliques inverses permettant de l'utiliser avec un partage Windows est file://\\SOMECORP\Corp\conda\channels\
. Fonctionne un charme.