cómo especificar la nueva ubicación del entorno para conda create

108

la ubicación predeterminada para los paquetes es la carpeta .conda en mi directorio personal. sin embargo, en el servidor que estoy usando, hay un límite muy estricto de cuánto espacio puedo usar, lo que básicamente me evita poner cualquier cosa en mi directorio personal. ¿Cómo puedo especificar la ubicación del entorno virtual que quiero crear? ¡Gracias! el servidor está ejecutando Ubuntu.

linX
fuente
9
¿Hay algún problema con la respuesta o por qué no la ha aceptado? Siempre puedes dejar comentarios si hay algo que no te gusta.
Pinocho
3
@linX Asegúrese siempre de votar a favor las respuestas que le gusten y acepte la respuesta que sea mejor o que resuelva su problema. Esto les otorga a los autores un premio menor y los incentiva a continuar dando respuestas útiles y bien pensadas.
Mike Williamson

Respuestas:

121

Utilice la opción --prefixo -ppara especificar dónde escribir los archivos de entorno. Por ejemplo:

conda create --prefix /tmp/test-env python=2.7

Creará el entorno nombrado en el /tmp/test-envque reside en /tmp/lugar del predeterminado .conda.

Paul
fuente
6
pero una vez que haya movido la ubicación del env, ¿cómo sabe Conda cómo encontrar dónde está ese nuevo env?
Pinocho
4
hay un directorio para cada entorno dentro de ~ / .conda / envs. Siga las instrucciones de otros y use --prefix para instalarlo donde desee. Luego cree un enlace simbólico de uno a otro: ln -s / shared / eng / conds / envs / test-env ~ / .conda / envs / test-env
Robert Lugg
1
¿por qué no conda create --name hbf_env --prefix /om2/user/username python=3.6 funciona? dice -bash: /home/username/.conda/envs/hbf_env/bin/conda: No such file or directory?
Charlie Parker
7
Charlie, no estoy seguro de por qué recibió el mensaje de error sobre el archivo / directorio faltante, pero independientemente de eso, --nameno se puede usar con --prefix. Suponiendo que conda esté instalado correctamente, el comando correspondiente sería conda create --prefix /om2/user/username/hbf_env python=3.6. Esto crearía un env nombrado hbf_enven la ubicación/om2/user/username/
Thomas Fauskanger
9
@ThomasFauskanger parece que el comando de prefijo no crea un nombre para el entorno, al menos para mí. Después, conda create --prefix hbf_enven el directorio local, se conda info --envsmuestra en blanco para el nombre pero muestra la ruta completa ... para activar el entorno es necesario que escriba la ruta completa (conda no puede encontrar el entorno si solo escribo el nombre)
Joshua Zastrow
53

como dijo Paul, usa

conda create --prefix=/users/.../yourEnvName python=x.x

si se encuentra en la carpeta en la que desea crear su entorno virtual, simplemente omita la ruta y use

conda create --prefix=yourEnvName python=x.x

conda solo realiza un seguimiento de los entornos incluidos en la carpeta envs dentro de la carpeta anaconda. La próxima vez que necesite activar su nuevo env, muévase a la carpeta donde lo creó y actívelo con

source activate yourEnvName
Darth_Tato
fuente
2
Tenga en cuenta que si olvidó el nombre del entorno, puede usar la ruta COMPLETA del directorio que contiene su entorno
tjb
2
Puede decirle a conda que busque envs en otras ubicaciones usando el .condarcarchivo de configuración. conda.io/docs/user-guide/configuration/...
Harsh
Esto crea un entorno sin nombre, solo el directorio. ¿Hay alguna forma de crear un nombre dentro de la declaración? Conda no me deja especificar ambos.
Kyouma
15

Si bien el uso de la --prefixopción funciona, debe usarla explícitamente cada vez que cree un entorno. Si solo desea que sus entornos se almacenen en otro lugar de forma predeterminada, puede configurarlo en su .condarcarchivo.

Consulte: https://conda.io/docs/user-guide/configuration/use-condarc.html#specify-environment-directories-envs-dirs

Christopher Barber
fuente
5
Si aún no ha cambiado esta variable, puede configurarla ejecutando este comando:conda config --append envs_dirs /path/to/envs
Arthur Tacca
5
También agregue env_prompt: ({name})a ~ / .condarc si obtiene la ruta completa en su indicador.
plonker13
12

Si desea usar los argumentos --prefixo -p, pero desea evitar tener que usar la ruta completa del entorno para activarlo, debe editar el .condarcarchivo de configuración antes de crear el entorno.

El .condarcarchivo está en el directorio de inicio; C:\Users\<user>en Windows. Edite los valores debajo de la envs_dirsclave para incluir la ruta personalizada para su entorno. Suponiendo que la ruta personalizada es D:\envs, el archivo debería terminar pareciéndose a esto:

ssl_verify: true
channels:
  - defaults
envs_dirs:
  - C:\Users\<user>\Anaconda3\envs
  - D:\envs

Luego, cuando cree un nuevo entorno en esa ruta, su nombre aparecerá junto con la ruta cuando ejecute conda env list, y debería poder activarlo usando solo el nombre, y no la ruta completa.

Captura de pantalla de la línea de comandos

En resumen, si edita .condarcpara incluir D:\envsy luego ejecuta conda env create -p D:\envs\myenv python=x.x, entonces activate myenv(o source activate myenven Linux) debería funcionar.

¡Espero que ayude!

PD Me encontré con esto a través de prueba y error. Creo que lo que sucede es que cuando editas la envs_dirsclave, conda se actualiza ~\.conda\environments.txtpara incluir los entornos que se encuentran en todos los directorios especificados en el envs_dirs, para que se pueda acceder a ellos sin usar rutas absolutas.

dkearn
fuente
8

Puedes crearlo así

conda create --prefix C:/tensorflow2 python=3.7

y no tienes que moverte a esa carpeta para activarlo.

# To activate this environment, use:
# > activate C:\tensorflow2

Como ves lo hago así.

D:\Development_Avector\PycharmProjects\TensorFlow>activate C:\tensorflow2

(C:\tensorflow2) D:\Development_Avector\PycharmProjects\TensorFlow>

(C:\tensorflow2) D:\Development_Avector\PycharmProjects\TensorFlow>conda --version
conda 4.5.13
Mohan Radhakrishnan
fuente
1
Si bien el OP dijo que estaban usando Ubuntu, +1 por también proporcionar la solución en una máquina con Windows. :)
Mike Williamson
3

Me encontré con una situación similar. Tuve acceso a una unidad de datos más grande. Dependiendo de su situación y del acceso que tenga al servidor, puede considerar

ln -s /datavol/path/to/your/.conda /home/user/.conda

Luego, los comandos de conda posteriores colocarán datos en el directorio enlazado simbólicamente en datavol

Paul
fuente
1
En mi opinión, esta es la respuesta realmente correcta: la pregunta original era sobre la ubicación de los paquetes y tiene cierta ambigüedad, pero recientemente encontré este problema e investigué un poco. Hay dos directorios importantes bajo $HOME/.conda, envsy pkgs. El uso del --prefixesquema mencionado anteriormente crea el entorno en otro lugar, pero todas las descargas de archivos de paquetes aún van a $HOME/.conda/pkgs. La solución de enlace simbólico que se ofrece aquí corrige tanto el entorno como las ubicaciones de descarga.
Andrew Reid
¡Esta es una solución perfecta!
Jingnan Jia